Node.js學習之路23——Node.js利用mongoose鏈接mongodb數據庫

Node.js利用mongoose鏈接mongodb數據庫

Node.js鏈接 mongodb數據庫有不少種方法,經過 mongoose模塊引入是其中的一個方法
  • 代碼組織結構
|---|根目錄
|---|---|connect.js(mongoose測試鏈接)
|---|---|user.js(定義user數據表)
|---|---|operate.js(定義mongodb的增刪改查功能)
|---|---|login.js(Node後臺調用operate.js文件的方法處理數據)

1. 引入mongoose測試鏈接

當前使用的 mongoose版本爲 4.13.7
  • 該文件爲connect.js

1.1 代碼部分

const mongoose = require("mongoose");
const DB_URL = "mongodb://127.0.0.1:27017/infos";
mongoose.Promise = global.Promise;
mongoose.connect(DB_URL, { useMongoClient: true });
mongoose.connection.on("connected", () => {
    console.log("mongodb數據庫鏈接成功")
});
mongoose.connection.on("error", (error) => {
    console.log("mongodb數據庫鏈接失敗", error)
});
module.exports = mongoose;

1.2 代碼分析

1.2.1 引入mongoose模塊

  • const mongoose = require("mongoose");

1.2.2 獲取mongodb的本機地址

  • const DB_URL = "mongodb://127.0.0.1:27017/infos";
  • 127.0.0.1是本地IP地址
  • 27017mongodb的服務啓動端口
  • infosmongodb的一個數據集合名字javascript

    • mongodb能夠有不少數據集合,每一個集合中能夠有不少數據表。
    • 類比一下:你有一個巨型停車場(mongodb),裏邊分了不一樣的停車區(集合,這裏的infos),每一個停車區能夠停不少車((下文提到的user),至關於每一個數據集合裏邊能夠有不少張數據表)。
  • 若是須要給mongodb加上用戶及密碼,能夠這樣java

    • const DB_URL = "mongodb://username:password@127.0.0.1:27017/infos";
    • 其中username爲用戶名,中間英文:password爲密碼,其他不變

1.2.3 鏈接數據庫成功

  • mongoose.connection.on("connected", callback())
  • 數據庫鏈接成功後,會在控制檯輸出mongodb數據庫鏈接成功

1.2.4 鏈接數據庫失敗

  • mongoose.connection.on("error", callback())
  • 數據庫鏈接成功後,會在控制檯輸出mongodb數據庫鏈接失敗和錯誤信息

1.2.5 導出mongoose模塊

  • module.exports = mongoose;

2. 定義每張數據表的字段

  • 該文件爲user.js

2.1 代碼介紹

const mongoose = require('mongoose');
const db = require('./connect.js');
const userSchema = new mongoose.Schema({
    number: { type: Number},
    email: { type: String },
    password: { type: String },
    rePassword: { type: String },
    mobile: { type: String },
    question: { type: String },
    answer: { type: String },
});
let userModel = db.model('user', userSchema);
module.exports = userModel;

2.2 代碼分析

2.2.1 引入mongoose模塊

  • const mongoose = require("mongoose");

2.2.1 引入鏈接mongodb數據庫的模塊

  • const db = require('./connect.js');

2.2.2 定義Schema

  • const userSchema = new mongoose.Schema({})
  • 經過mongoose對象的Schema屬性建立一個Schema對象
Schema原意爲 架構
mongodb中,每個數據字段都要有固定的數據類型,因此 Schemamongoose中的意思爲,每一張數據表對應的字段的數據類型
  • Schema所可以擁有的數據類型有如下幾個mongodb

    • String
    • Number
    • Date
    • Buffer
    • Boolean
    • Mixed
    • ObjectId
    • Array
  • 字段介紹,以number字段爲例數據庫

    • type是該字段的數據類型
    • default是該字段的默認值
    • 還有不少其餘的屬性,以及能夠自定義屬性

2.2.3 確認數據表和該數據表的字段

  • let userModel = db.model('user', userSchema);
  • 定義一個數據表userModel
  • 使用db.model方法,第一個參數是數據表的名字,第二個參數是該數據表使用的Schema

2.2.4 最終導出定義的數據表

  • module.exports = userModel;
  • 導出以後,在operate.js中使用這個對象的mongodb的增刪改查方法

3. 定義mongodb的增刪改查功能

3.1 代碼部分

  • 該文件爲operate.js
let userModel = require('./user.js');
module.exports = {
    save(data) {
        return new Promise((resolve, reject) => {
            userModel.create(data, (err, docs) => {
                if (err) {
                    rejct(err);
                } else {
                    resolve(docs);
                }
            })
        })
    },
    find(data = {}, fields = null, options = {}) {
        return new Promise((resolve, reject) => {
            //model.find(須要查找的對象(若是爲空,則查找到全部數據), 屬性過濾對象[可選參數], options[可選參數], callback)
            userModel.find(data, fields, options, (error, doc) => {
                if (error) {
                    reject(error)
                } else {
                    resolve(doc)
                }
            })
        })
    },
    findOne(data) {
        return new Promise((resolve, reject) => {
            //model.findOne(須要查找的對象,callback)
            userModel.findOne(data, (error, doc) => {
                if (error) {
                    reject(error)
                } else {
                    resolve(doc)
                }
            })
        })
    },
    findById(data) {
        return new Promise((resolve, reject) => {
            //model.findById(須要查找的id對象 ,callback)
            userModel.findById(data, (error, doc) => {
                if (error) {
                    reject(error)
                } else {
                    resolve(doc)
                }
            })
        })
    },
    update(conditions, update) {
        return new Promise((resolve, reject) => {
            //model.update(查詢條件,更新對象,callback)
            userModel.update(conditions, update, (error, doc) => {
                if (error) {
                    reject(error)
                } else {
                    resolve(doc)
                }
            })
        })
    },
    remove(conditions) {
        return new Promise((resolve, reject) => {
            //model.update(查詢條件,callback)
            userModel.remove(conditions, (error, doc) => {
                if (error) {
                    reject(error)
                } else {
                    resolve(doc)
                }
            })
        })
    }
};

3.2 代碼分析

  • 引入user模塊
  • let userModel = require('../models/users');
  • 引入該文件的目的是,讓userModel這個數據表直接的調用mongodb的各類方法

4. 後臺直接使用operate處理數據

  • 該文件爲login.js

4.1 代碼部分

const express = require('express');
const router = express.Router();
let operate = require('./operate');
router.post('/', function (req, res, next) {
    let param = {};
    param.email = req.body.email;
    param.password = req.body.password;
    console.log(param);
    operate.save(param).then(result => {
        if (result) {
            res.json({
                data: result,
                success: true
            })
        } else {
            res.json({
                data: result,
                success: false
            })
        }
    });
});
module.exports = router;

4.2 代碼分析

  • 須要熟練使用Expressrouter方法
  • 引入Express,定義一個post方法
  • post方法傳遞的對象數據掛在在req.body
  • 直接調用operate.save()方法,傳遞param對象參數
  • 獲取到返回結果result,對獲取到的結果進行進一步處理
相關文章
相關標籤/搜索