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 相关文章推荐
什么是Node.js?Node.js详细介绍
Jun 01 Javascript
Javascript 拖拽雏形中的一些问题(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 Javascript
异步安全加载javascript文件的方法
Jul 21 Javascript
XML文件转化成NSData对象的方法
Aug 12 Javascript
jquery+css3实现会动的小圆圈效果
Jan 27 Javascript
浅谈如何实现easyui的datebox格式化
Jun 12 Javascript
微信小程序 框架详解及实例应用
Sep 26 Javascript
详解使用vue实现tab 切换操作
Jul 03 Javascript
JS温故而知新之变量提升和时间死区
Jan 27 Javascript
JS异步错误捕获的一些事小结
Apr 26 Javascript
详解VScode编辑器vue环境搭建所遇问题解决方案
Apr 26 Javascript
微信小程序自定义纯净模态框(弹出框)的实例代码
Mar 09 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
十大催泪虐心动漫,你能坚持看到第几部?
2020/03/04 日漫
提升PHP执行速度全攻略(上)
2006/10/09 PHP
PHP一些有意思的小区别
2006/12/06 PHP
兼容性最强的PHP生成缩略图的函数代码(修改版)
2011/01/18 PHP
CI框架装载器Loader.php源码分析
2014/11/04 PHP
Yii2中使用asset压缩js,css文件的方法
2016/11/24 PHP
php设计模式之工厂模式用法经典实例分析
2019/09/20 PHP
js类中的公有变量和私有变量
2008/07/24 Javascript
发一个自己用JS写的实用看图工具实现代码
2008/07/26 Javascript
js下写一个事件队列操作函数
2010/07/19 Javascript
jQuery 鼠标经过(hover)事件的延时处理示例
2014/04/14 Javascript
在JavaScript中使用timer示例
2014/05/08 Javascript
javascript实时显示当天日期的方法
2015/05/20 Javascript
js操作table元素实现表格行列新增、删除技巧总结
2015/11/18 Javascript
JS中跨页面调用变量和函数的方法(例如a.js 和 b.js中互相调用)
2016/11/01 Javascript
详解nodeJS中读写文件方法的区别
2017/03/06 NodeJs
微信小程序promsie.all和promise顺序执行
2017/10/27 Javascript
ejsExcel模板在Vue.js项目中的实际运用
2018/01/27 Javascript
webpack+vue-cli项目中引入外部非模块格式js的方法
2018/09/28 Javascript
JavaScript ES6常用基础知识总结
2019/02/09 Javascript
Vue中的组件及路由使用实例代码详解
2019/05/22 Javascript
工作中常用js功能汇总
2020/11/07 Javascript
Python基类函数的重载与调用实例分析
2015/01/12 Python
Windows安装Python、pip、easy_install的方法
2017/03/05 Python
python输入整条数据分割存入数组的方法
2018/11/13 Python
Python实现的爬取小说爬虫功能示例
2019/03/30 Python
python模拟菜刀反弹shell绕过限制【推荐】
2019/06/25 Python
Python函数的默认参数设计示例详解
2019/12/01 Python
opencv设置采集视频分辨率方式
2019/12/10 Python
详解Python遍历列表时删除元素的正确做法
2021/01/07 Python
学校安全教育制度
2014/01/31 职场文书
五一劳动节演讲稿
2014/09/12 职场文书
运动会加油稿100字
2014/09/19 职场文书
结婚保证书(三从四德)
2015/02/26 职场文书
求职自荐信怎么写
2015/03/04 职场文书
SQLServer2019 数据库环境搭建与使用的实现
2021/04/08 SQL Server