node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】


Posted in Javascript onMarch 07, 2019

本文实例讲述了node链接mongodb数据库的方法。分享给大家供大家参考,具体如下:

一、安装2.6版本以上的mongodb在云服务器上(百度就能查到安装方法,以及验证是否安装成功一般是mongodb ?version);

二、因为mongodb的默认开启端口是27017,所以要在Ubuntu上开启这个端口:

ufw allow 27017
ufw enable
ufw reload
ufw status //这是查看这个端口是否开启,iptables --list也可以查看

光在服务器开了端口还不行,还要在阿里云服务器控制台的安全组中添加这个端口:

node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】

三、在node项目中利用npm安装mongodb:

npm i mongodb --save

四、链接的具体代码(前提是已经建立了简单的http或者https服务),具体代码:

const http = require('http')
  , https = require('https');
const express = require('express');
const bodyParser = require('body-parser')
const app = express();
const fs = require('fs');
const ejs = require('ejs');
const path = require('path');
const MongoClient = require('mongodb').MongoClient;
// 返回信息
const questions = {
  code: 200,
  msg: 'success',
};
// https证书,开https服务的自验证证书
const options = {
  key: fs.readFileSync('./privatekey.pem'),
  cert: fs.readFileSync('./certificate.pem')
};
let xltitle = '标题(初始化数据)',
  xlcontent = '内容(初始化数据)',
  xlfaceid = '1(初始化数据)';
const url = 'mongodb://127.0.0.1/xlbase';
// 默认端口27017,无需填写
// 也可以修改端口,vim /etc/mongodb.conf
// 初始化数据库
MongoClient.connect(url, function (err, db) {
  if (err) throw err;
  let database = db.db('xlbase');
  console.log('------------数据库初始化成功------------');
// 如果没有face这个集合,会创建一个,所以可以用这个来初始化集合
  database.createCollection('face', function (err, res) {
    if (err) throw err;
    console.log('------------集合初始化完毕------------');
    db.close();
  });
});
//设置跨域访问
app.all('*', function (req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "X-Requested-With");
  res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
  res.header("X-Powered-By", ' 3.2.1');
  // res.header("Content-Type", "application/json;charset=utf-8");
  next();
});
// parse application/x-www-form-urlencoded 解析
app.use(bodyParser.urlencoded({extended: false}));
// parse application/json 解析
app.use(bodyParser.json());
// view engine setup,视图模版
app.set('views', path.join(__dirname, './'));
app.set('view engine', 'jade');
// 静态资源解析路径(css,js,图片等)
app.use(express.static(path.join(__dirname, './static')));
// 数据接收接口
app.post('/info', function (req, res) {
  res.header("Content-Type", "application/json;charset=utf-8");
  res.status(200);
  xltitle = req.body.title;
  xlcontent = req.body.content;
  xlfaceid = req.body.faceId;
  let info = {
    'faceid': xlfaceid,
    'title': xltitle,
    'content': xlcontent
  };
  let faceid = {
    'faceid': xlfaceid
  };
  let updateInfo = {$set: info};// 组装更新的信息
  MongoClient.connect(url, function (err, db) {
    let database = db.db('xlbase');
    database.collection('face').find(faceid).toArray(function (err, result) {
      if (err) throw err;
      // 判断集合中faceid和当前传过来的faceid是否相同和存在
      // 如果不存在就新插入这条数据
      // 如果存在且相同,就更新数据
      if (result.length !== 0 && result[0].faceid === xlfaceid) {
        database.collection("face").updateOne(faceid, updateInfo, function (err, res) {
          if (err) throw err;
          console.log("------------数据更新成功------------");
          db.close();
        });
      } else {
        database.collection('face').insertOne(info, function (err, res) {
          if (err) throw err;
          console.log("------------数据添加成功------------");
          db.close();
        })
      }
    })
  });
  res.json(questions); // 返回信息
  res.end(JSON.stringify(req.body, null, 2))
});
app.get('/index', function (req, res) {
  res.status(200);
  res.header("Content-Type", "text/html;charset=utf-8");
// 根据faceId查询数据
  MongoClient.connect(url, function (err, db) {
    if (err) throw err;
    let dbo = db.db("xlbase");
    let face = {"faceid": xlfaceid}; // 查询条件
    let xltitle1 = 404;
    let xlcontent1 = '网页出错!';
    dbo.collection("face").find(face).toArray(function (err, result) {
      if (err) throw err;
      console.log(result);
      xltitle1 = result[0].title;
      xlcontent1 = result[0].content;
      db.close();
      console.log('------------查询完毕------------');
      res.send('<h3 style="font-size: 35px">' + xltitle1 + '</h3>' +
        '<pre style="white-space: pre-wrap;word-wrap: break-word;font-size: 30px">' + xlcontent1 + '</pre>');
      res.end();
    });
  });
})
// 配置服务端口
// http.createServer(app).listen(3001, function () {
//   console.log('3001')
// });
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; // 绕过证书验证
https.createServer(options, app).listen(8009, function () {
  console.log('port: 8009');
});
// var server = app.listen(3001, function () {
//
//   var host = server.address().address;
//
//   var port = server.address().port;
//
//   console.log('Example app listening at http://%s:%s', host, port);
// })

希望本文所述对大家nodejs程序设计有所帮助。

Javascript 相关文章推荐
JavaScript 直接操作本地文件的实现代码
Dec 01 Javascript
JavaScript中两个感叹号的作用说明
Dec 28 Javascript
javascript基础知识大全 便于大家学习,也便于我自己查看
Aug 17 Javascript
JS+ACTIVEX实现网页选择本地目录路径对话框
Mar 18 Javascript
js实现幻灯片播放图片示例代码
Nov 07 Javascript
jquery实现的导航固定效果
Apr 28 Javascript
JavaScript常用脚本汇总(三)
Mar 04 Javascript
javascript每日必学之继承
Feb 23 Javascript
AngularJs 动态加载模块和依赖
Sep 15 Javascript
jquery ajax异步提交表单数据的方法
Oct 27 jQuery
javascript标准库(js的标准内置对象)总结
May 26 Javascript
详解React Native 屏幕适配(炒鸡简单的方法)
Jun 11 Javascript
Vue中的情侣属性$dispatch和$broadcast详解
Mar 07 #Javascript
JS/jQuery实现获取时间的方法及常用类完整示例
Mar 07 #jQuery
在Web关闭页面时发送Ajax请求的实现方法
Mar 07 #Javascript
mpvue微信小程序多列选择器用法之省份城市选择的实现
Mar 07 #Javascript
使用vue开发移动端管理后台的注意事项
Mar 07 #Javascript
vue插件mescroll.js实现移动端上拉加载和下拉刷新
Mar 07 #Javascript
从0到1构建vueSSR项目之node以及vue-cli3的配置
Mar 07 #Javascript
You might like
php批量缩放图片的代码[ini参数控制]
2011/02/11 PHP
ThinkPHP验证码使用简明教程
2014/03/05 PHP
destoon实现调用当前栏目分类及子分类和三级分类的方法
2014/08/21 PHP
php使用unset()删除数组中某个单元(键)的方法
2015/02/17 PHP
PHP设置头信息及取得返回头信息的方法
2016/01/25 PHP
thinkphp3.2点击刷新生成验证码
2016/02/16 PHP
js自动生成的元素与页面原有元素发生堆叠的解决方法
2014/09/04 Javascript
基于JQuery实现图片上传预览与删除操作
2016/05/24 Javascript
jQuery Select下拉框操作小结(推荐)
2016/07/22 Javascript
JavaScript兼容浏览器FF/IE技巧
2016/08/14 Javascript
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
React学习之JSX与react事件实例分析
2020/01/06 Javascript
js与jquery获取input输入框中的值实例讲解
2020/02/27 jQuery
Python使用Flask框架同时上传多个文件的方法
2015/03/21 Python
python实现红包裂变算法
2016/02/16 Python
总结网络IO模型与select模型的Python实例讲解
2016/06/27 Python
python机器学习理论与实战(五)支持向量机
2018/01/19 Python
Python3.5 创建文件的简单实例
2018/04/26 Python
Python使用Matplotlib模块时坐标轴标题中文及各种特殊符号显示方法
2018/05/04 Python
简单了解python 生成器 列表推导式 生成器表达式
2019/08/22 Python
Python单元测试模块doctest的具体使用
2020/02/10 Python
美国领先的礼品卡网站:GiftCards.com
2016/11/02 全球购物
Topshop法国官网:英国快速时尚品牌
2018/04/08 全球购物
大学生个人推荐信范文
2013/11/25 职场文书
《猴子种树》教学反思
2014/02/14 职场文书
关爱老人标语
2014/06/21 职场文书
中国梦读书活动总结
2014/07/10 职场文书
党支部创先争优承诺书
2014/08/30 职场文书
2014年办公室个人工作总结
2014/11/12 职场文书
2014年班长个人工作总结
2014/11/14 职场文书
2014年大学团支部工作总结
2014/12/02 职场文书
男方家长婚礼致辞
2015/07/27 职场文书
小学教师教育随笔
2015/08/14 职场文书
2016年度师德标兵先进事迹材料
2016/02/26 职场文书
微信小程序APP的生命周期及页面的生命周期
2022/04/19 Javascript
python数字图像处理:图像的绘制
2022/06/28 Python