成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Node.js學(xué)習(xí)之路23——Node.js利用mongoose連接mongodb數(shù)據(jù)庫

jsummer / 1810人閱讀

摘要:類比一下你有一個巨型停車場,里邊分了不同的停車區(qū)集合,這里的,每個停車區(qū)可以停很多車下文提到的,相當于每個數(shù)據(jù)集合里邊可以有很多張數(shù)據(jù)表。

Node.js利用mongoose連接mongodb數(shù)據(jù)庫
Node.js連接mongodb數(shù)據(jù)庫有很多種方法,通過mongoose模塊引入是其中的一個方法

代碼組織結(jié)構(gòu)

|---|根目錄
|---|---|connect.js(mongoose測試連接)
|---|---|user.js(定義user數(shù)據(jù)表)
|---|---|operate.js(定義mongodb的增刪改查功能)
|---|---|login.js(Node后臺調(diào)用operate.js文件的方法處理數(shù)據(jù))
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數(shù)據(jù)庫連接成功")
});
mongoose.connection.on("error", (error) => {
    console.log("mongodb數(shù)據(jù)庫連接失敗", 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的服務(wù)啟動端口

infosmongodb的一個數(shù)據(jù)集合名字

mongodb可以有很多數(shù)據(jù)集合,每個集合中可以有很多數(shù)據(jù)表。

類比一下:你有一個巨型停車場(mongodb),里邊分了不同的停車區(qū)(集合,這里的infos),每個停車區(qū)可以停很多車((下文提到的user),相當于每個數(shù)據(jù)集合里邊可以有很多張數(shù)據(jù)表)。

如果需要給mongodb加上用戶及密碼,可以這樣

const DB_URL = "mongodb://username:[email protected]:27017/infos";

其中username為用戶名,中間英文:,password為密碼,其余不變

1.2.3 連接數(shù)據(jù)庫成功

mongoose.connection.on("connected", callback())

數(shù)據(jù)庫連接成功后,會在控制臺輸出mongodb數(shù)據(jù)庫連接成功

1.2.4 連接數(shù)據(jù)庫失敗

mongoose.connection.on("error", callback())

數(shù)據(jù)庫連接成功后,會在控制臺輸出mongodb數(shù)據(jù)庫連接失敗和錯誤信息

1.2.5 導(dǎo)出mongoose模塊

module.exports = mongoose;

2. 定義每張數(shù)據(jù)表的字段

該文件為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數(shù)據(jù)庫的模塊

const db = require("./connect.js");

2.2.2 定義Schema

const userSchema = new mongoose.Schema({})

通過mongoose對象的Schema屬性創(chuàng)建一個Schema對象

Schema原意為架構(gòu)
mongodb中,每一個數(shù)據(jù)字段都要有固定的數(shù)據(jù)類型,所以Schemamongoose中的意思為,每一張數(shù)據(jù)表對應(yīng)的字段的數(shù)據(jù)類型

Schema所能夠擁有的數(shù)據(jù)類型有以下幾個

String

Number

Date

Buffer

Boolean

Mixed

ObjectId

Array

字段介紹,以number字段為例

type是該字段的數(shù)據(jù)類型

default是該字段的默認值

還有很多其他的屬性,以及可以自定義屬性

2.2.3 確認數(shù)據(jù)表和該數(shù)據(jù)表的字段

let userModel = db.model("user", userSchema);

定義一個數(shù)據(jù)表userModel

使用db.model方法,第一個參數(shù)是數(shù)據(jù)表的名字,第二個參數(shù)是該數(shù)據(jù)表使用的Schema

2.2.4 最終導(dǎo)出定義的數(shù)據(jù)表

module.exports = userModel;

導(dǎo)出之后,在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(需要查找的對象(如果為空,則查找到所有數(shù)據(jù)), 屬性過濾對象[可選參數(shù)], options[可選參數(shù)], 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這個數(shù)據(jù)表直接的調(diào)用mongodb的各種方法

4. 后臺直接使用operate處理數(shù)據(jù)

該文件為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方法傳遞的對象數(shù)據(jù)掛在在req.body

直接調(diào)用operate.save()方法,傳遞param對象參數(shù)

獲取到返回結(jié)果result,對獲取到的結(jié)果進行進一步處理

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/93060.html

相關(guān)文章

  • Node.js學(xué)習(xí)之路23——Node.js利用mongoose連接mongodb數(shù)據(jù)庫

    摘要:類比一下你有一個巨型停車場,里邊分了不同的停車區(qū)集合,這里的,每個停車區(qū)可以停很多車下文提到的,相當于每個數(shù)據(jù)集合里邊可以有很多張數(shù)據(jù)表。 Node.js利用mongoose連接mongodb數(shù)據(jù)庫 Node.js連接mongodb數(shù)據(jù)庫有很多種方法,通過mongoose模塊引入是其中的一個方法 代碼組織結(jié)構(gòu) |---|根目錄 |---|---|connect.js(mongoose測...

    ssshooter 評論0 收藏0
  • Node +MongoDB 搭建后臺的全過程

    摘要:搭建后臺的全過程近期基于搭建前端項目,搭建后臺,遇到了不少問題,總結(jié)博客如下,有什么不正確的地方,請大家批評指正是非關(guān)系型數(shù)據(jù)庫。是用來啟動的,是的命令行客戶端。 Node + mongoDB 搭建后臺的全過程 近期基于 vue-cil 搭建前端項目, express + mongoose 搭建后臺,遇到了不少問題,總結(jié)博客如下,有什么不正確的地方,請大家批評指正^?_?^! mong...

    voidking 評論0 收藏0
  • 【實戰(zhàn)】用 express+MongoDB 搭建一個完整的前端項目

    摘要:前言要做一個全沾的工程師,對于后端和數(shù)據(jù)庫來說,即使不認識也要見個面的?;玖私獾母拍罹秃茫饕前惭b上數(shù)據(jù)庫,并進行簡單的增刪操作。 前言:要做一個全沾的工程師,對于后端和數(shù)據(jù)庫來說,即使不認識也要見個面的。本文給的例子很簡單,也貼出來源碼,只要一步步下來,就可以跑起來啦~~~ 思考一個需求:做一個登錄頁面,自己搭建服務(wù)和數(shù)據(jù)庫,將用戶輸入的登錄信息保存到數(shù)據(jù)庫如何完成呢:首先選擇...

    Steve_Wang_ 評論0 收藏0
  • 基于 Vue2+Node+mongoDB 的前后端分離全棧練手小項目

    摘要:本文源碼簡介之前剛?cè)腴T并做好了一個簡而全的純?nèi)彝暗捻椖?,?shù)據(jù)都是本地模擬請求的詳情請移步這里為了真正做到數(shù)據(jù)庫的真實存取,于是又開始入門了并以此來為之前的頁面寫后臺數(shù)據(jù)接口。 本文源碼:Github 簡介: 之前剛?cè)腴Tvue并做好了一個簡而全的純vue2全家桶的項目,數(shù)據(jù)都是本地 json 模擬請求的;詳情請移步這里:vue-proj-demo 為了真正做到數(shù)據(jù)庫的真實存取,于是又...

    jay_tian 評論0 收藏0
  • Node學(xué)習(xí)記錄: mongodb

    摘要:的邏輯結(jié)構(gòu)是一種層次結(jié)構(gòu),主要由文檔集合數(shù)據(jù)庫這三部分組成的。文檔由鍵值對構(gòu)成,像等,它是核心單元,的文檔,相當于關(guān)系數(shù)據(jù)庫中的一行記錄。我們以此為例看它如何使用真實項目中參考學(xué)習(xí)筆記之的使用入門教程的一些操作命令 showImg(https://segmentfault.com/img/bVN45N?w=1192&h=578); 簡介 在說MongoDB數(shù)據(jù)插入操作之前,我們先來簡單...

    zzzmh 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<