天天看点

2019 node.js调用mongodb实现一些操作代码1 首先创建express工程目录2 直接先上数据库代码

express + nodejs + mongodb实现一个简单的数据库的增删改功能。

1 首先创建express工程目录

---html
---node_modules
---resources
app.js    #入口模块
config.js #配置模块
handler.js #业务处理模块
router.js  #路由模块
package.json #包管理
           

2 直接先上数据库代码

本文主要是描述nodejs的mongodb数据库操作,所以其余代码,可以看本文后边,package.json文件后面也有。如果想看包的列表和版本在后面~

业务处理模块:handle.js

var path = require('path');
//在此导入mongodb
//当然,首先得安装mongodb,且在工程目录下npm i mongodb才可以导入进来。
var mongodb = require('mongodb');  
// config.js主要配置了nodejs的端口号和 mongodb的端口号
var config = require('./config.js');
var url = require('url');

//外部由路由模块router.js导入,这里直接使用module.exports向外暴露一个API,


//1. 数据库的“查查查查查查查查查查查查查”
module.exports.index = function (req, res) {
  // 创建一个mongodb实例 
  var MongoClient = mongodb.MongoClient;
  // 把这个实例连接到mongodb服务器
  MongoClient.connect(config.connStr, function (err, db) {
    if (err) {
      throw err;
    }
    // 这里有个坑,新版本的mongo需要在连接成功后,连接一个数据库。
    // 注意:这里的数据库可以是mongodb中存在的,也可以是不存在的,如果不存在,则默认自动创建一个数据库vueStudy。
    var mydb = db.db('vueStudy');

    // 查询在vueStudy这个数据库下 名为 prodlist 的 一个集合,
    // find() 功能:这个集合下所有的数据全部导出。格式为JSON
    // toArray 功能:变成一个数组,在回调函数中返回一个docs,这个docs是一个数组。
    mydb.collection('prodlist').find().toArray(function (err, docs) {
      if (err) {
        throw err;
      }
      // 关闭数据库连接
      db.close();
      // 将最终的数据,以JSON格式发送给客户端。
      // 注意:1.这里的docs,其实就是一个JSON对象,这个JSON对象的Body中有所有的数据。
      // 2.在服务器端只能发送字符串,但在客户端接收的时候,会自动变成对象。
      res.end(JSON.stringify(docs));
    });
  });
};
//2. 数据库的“增增增增增增增增增增增增增增增”
module.exports.add = function (req, res) {
	//同上,就不在那么详细的写了。
    var MongoClient = mongodb.MongoClient;
    MongoClient.connect(config.connStr, function (err, db) {
        if (err) {
            throw err;
        }
        var mydb = db.db('vueStudy');

        // 执行查询操作
        mydb.collection('prodlist').find().toArray(function (err, docs) {
            if (err) {
                throw err;
            }
            // 关闭数据库连接
            var newData = {
            //这个相当于取到最后一个元素的id,然后自增1.
                id:docs[0].message[docs[0].message.length - 1].id + 1,
                name:req.body.name,
                ctime: new Date()
            };
            mydb.collection('prodlist').updateOne({"status":0},{$push : { "message": newData}});
            db.close();
            res.end('{status:0, message:"添加成功"}');
        });
    });
};
//2. 数据库的“删删删删删删删删删删删删删删删删删删删删删删”
module.exports.del = function(req, res) {
    var MongoClient = mongodb.MongoClient;
    MongoClient.connect(config.connStr, function (err, db) {
        if (err) {
            throw err;
        }
        var id = undefined;
        var reqUrl = req.url;
        //调试信息
        //这里,可能写的有点蠢了...不过还懒得去找好方法...应该是能直接调用的
        console.log('---------------------------' + reqUrl);
        reqUrl = reqUrl.split('');
        reqUrl.splice(0,1);
        id = Number(reqUrl.join(''));
        var mydb = db.db('vueStudy');
        // 执行删除操作
        // 执行查询操作
        mydb.collection('prodlist').updateOne({"status":0},{$pull : { "message": {"id":id}}});
        db.close();
        //这里比较搞笑,明明我直接穿了一个JSON对象过去了,
        //但是客户端那边接收到的就是一个string类型的字符串
        //使用console.log打印出来也确实是Json格式的字符串
        //但TM就是不能用JSON.parse()转换成JSON格式的文件...
        // 所以这里在客户端那边匹配的时候,就直接是用字符串操作来匹配的...
        // str1.includes(str2)
        res.end('{status:0, message:"删除成功"}');
    });
};
           

其他文件我就直接挨个展示了,需要调试的朋友,可以按照文头的工程目录结构创建,然后进行调试。

入口模块:app.js

// app.js 模块职责: 负责启动服务

// 1. 加载 express 模块
var express = require('express');
// 加载 config.js 模块
var config = require('./config.js');
// 加载路由模块
var router = require('./router.js');
var path = require('path');

// 1. 加载 body-parser 模块
var bodyParser = require('body-parser');

// 2. 创建 app 对象
var app = express();

// 配置使用 ejs 模板引擎,修改默认查找的模板文件后缀为 html
// 1. 设置模板文件的存放路径
app.set('views', path.join(__dirname, 'htmls'));
// 2. 创建一个自己的模板引擎,用来识别后缀是 html 的模板文件
app.engine('html', require('ejs').renderFile);
// 3. 使用刚才自己创建的这个模板引擎
app.set('view engine', 'html');

// 配置 body-parser 插件(挂载 body-parser 中间件)
// 一定要在正式处理请求之前设置body-parser
// req.body
// 如果参数 extended: false,表示在bodyparser内部,使用node.js内置的 querystring 模块把 用户post提交的查询字符串转换为 json 对象
// 如果参数 extended: true,表示在bodyparser内使用第三方的 qs 模块把 用户post提交的查询字符串转换为 json 对象
app.use(bodyParser.urlencoded({extended: false}));

// 3. 注册路由
// 设置app 与 router 相关联
// app.use('/', router);
app.use(router);

// 4. 启动服务
app.listen(config.port, function () {
  console.log('http://localhost:' + config.port);
});
           

路由模块:router.js

// 路由模块,主要负责路由判断


// 1. 创建一个 router 对象 (router 对象既是一个对象,也是一个函数)
var express = require('express');
// 加载业务模块
var handler = require('./handler.js');
var path = require('path');

var router = express.Router();

router.get('/index', handler.index);

router.post('/add', handler.add);

router.use('/del',handler.del);

router.use('/lib', express.static(path.join(__dirname, 'lib')));


// 3. 返回 router 对象
module.exports = router;

           

配置文件:config.js

// 配置模块,主要职责是负责保存项目中的配置信息


module.exports = {
  port: 9090,
  connStr: 'mongodb://localhost:27017/hackernews'
};