天天看點

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'
};