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 相关文章推荐
jQuery 使用个人心得
Feb 26 Javascript
Javascript基础知识(三)BOM,DOM总结
Sep 29 Javascript
javascript查询字符串参数的方法
Jan 28 Javascript
IE下支持文本框和密码框placeholder效果的JQuery插件分享
Jan 31 Javascript
js实现仿百度汽车频道选择汽车图片展示实例
May 06 Javascript
JS鼠标拖拽实例分析
Nov 23 Javascript
直接拿来用的页面跳转进度条JS实现
Jan 06 Javascript
jquery获取所有选中的checkbox实现代码
May 26 Javascript
解析JavaScript实现DDoS攻击原理与保护措施
Dec 26 Javascript
基于vue实现分页效果
Nov 06 Javascript
JS匿名函数和匿名自执行函数概念与用法分析
Mar 16 Javascript
vue实现移动端input上传视频、音频
Aug 18 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入门经历和学习过程分享
2014/04/11 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
2014/10/30 PHP
Yii核心组件AssetManager原理分析
2014/12/02 PHP
9个实用的PHP代码片段分享
2015/01/22 PHP
php经典算法集锦
2015/11/14 PHP
让JavaScript 轻松支持函数重载 (Part 1 - 设计)
2009/08/04 Javascript
Iframe 自适应高度并实时监控高度变化的js代码
2009/10/30 Javascript
js 绑定带参数的事件以及手动触发事件
2010/04/27 Javascript
javascript textarea光标定位方法(兼容IE和FF)
2011/03/12 Javascript
图片动画横条广告带上下滚动的JS代码
2013/10/25 Javascript
将数字转换成大写的人民币表达式的js函数
2014/09/21 Javascript
IE中鼠标经过option触发mouseout的解决方法
2015/01/29 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
Bootstrop实现多级下拉菜单功能
2016/11/24 Javascript
node学习记录之搭建web服务器教程
2017/02/16 Javascript
easyui-datagrid特殊字符不能显示的处理方法
2017/04/12 Javascript
详解Vue2 添加对scss的支持
2019/01/02 Javascript
JS浮点数运算结果不精确的Bug解决
2019/08/01 Javascript
javascript实现摄像头拍照预览
2019/09/30 Javascript
Vue父子组件传值的一些坑
2020/09/16 Javascript
vue3.0封装轮播图组件的步骤
2021/03/04 Vue.js
[03:01]DOTA2英雄基础教程 露娜
2014/01/07 DOTA
Python读写Excel文件的实例
2013/11/01 Python
Pytorch之finetune使用详解
2020/01/18 Python
Python中的 ansible 动态Inventory 脚本
2020/01/19 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
2020/09/09 Python
HTML5的结构和语义(2):结构
2008/10/17 HTML / CSS
最新茶叶店创业计划书
2014/01/14 职场文书
市场营销专业大学生职业生涯规划文
2014/03/06 职场文书
2014年计划生育协会工作总结
2014/11/14 职场文书
教师党员承诺书2015
2015/01/21 职场文书
公司介绍信范文
2015/01/31 职场文书
大学考试作弊检讨书
2015/05/06 职场文书
遗失证明范文
2015/06/19 职场文书
企业开发CSS命名BEM代码规范实践
2022/02/12 HTML / CSS