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 获取链接(url)参数的方法
Feb 15 Javascript
JavaScript高级程序设计 阅读笔记(四) ECMAScript中的类型转换
Feb 27 Javascript
js中小数转换整数的方法
Jan 26 Javascript
javascript实现十六进制颜色值(HEX)和RGB格式相互转换
Jun 20 Javascript
通用无限极下拉菜单的实现代码
May 31 Javascript
js弹出窗口简单实现代码
Mar 22 Javascript
View.post() 不靠谱的地方你知道多少
Aug 29 Javascript
vue 列表页跳转详情页获取id以及详情页通过id获取数据
Mar 27 Javascript
layui 实现自动选择radio单选框(checked)的方法
Sep 03 Javascript
js实现的订阅发布者模式简单示例
Mar 14 Javascript
何时/使用 Vue3 render 函数的教程详解
Jul 25 Javascript
如何利用javascript接收json信息并进行处理
Aug 06 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写MySQL数据 实现代码
2009/06/15 PHP
php判断输入不超过mysql的varchar字段的长度范围
2011/06/24 PHP
浅析php学习的路线图
2013/07/10 PHP
CI操作cookie的方法分析(基于helper类库)
2016/03/28 PHP
浅谈PHP中静态方法和非静态方法的相互调用
2016/10/04 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
PHP操作Postgresql封装类与应用完整实例
2018/04/24 PHP
Laravel框架创建路由的方法详解
2019/09/04 PHP
Javascript学习笔记2 函数
2010/01/11 Javascript
面向对象继承实例(a如何继承b问题)(自写)
2013/07/01 Javascript
JS实现控制表格行内容垂直对齐的方法
2015/03/30 Javascript
简单分析javascript面向对象与原型
2015/05/21 Javascript
javascript表单事件处理方法详解
2016/05/15 Javascript
vue2.0 keep-alive最佳实践
2017/07/06 Javascript
关于vue中 $emit的用法详解
2018/04/12 Javascript
微信小程序导入Vant报错VM292:1 thirdScriptError的解决方法
2019/08/01 Javascript
原生JavaScript实现进度条
2021/02/19 Javascript
shelve  用来持久化任意的Python对象实例代码
2016/10/12 Python
CentOS中升级Python版本的方法详解
2017/07/10 Python
Python实现的根据IP地址计算子网掩码位数功能示例
2018/05/23 Python
详解python tkinter教程-事件绑定
2019/03/28 Python
python 接口实现 供第三方调用的例子
2019/08/13 Python
Python facenet进行人脸识别测试过程解析
2019/08/16 Python
前端使用canvas生成盲水印的加密解密的实现
2020/12/16 HTML / CSS
阿玛瑞酒店中文官方网站:Amari.com
2018/02/13 全球购物
仓库主管的岗位职责
2013/12/04 职场文书
教导处工作制度
2014/01/18 职场文书
小学教师师德感言
2014/02/10 职场文书
初级会计求职信范文
2014/02/15 职场文书
护理专业自荐书
2014/06/04 职场文书
餐饮服务食品安全责任书
2014/07/25 职场文书
群众路线查摆问题整改措施思想汇报
2014/10/10 职场文书
财务总监岗位职责
2015/02/03 职场文书
倡议书的格式写法
2015/04/28 职场文书
自愿离婚协议书范本2016
2016/03/18 职场文书
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server