摘要:類比一下你有一個巨型停車場,里邊分了不同的停車區(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地址
27017是mongodb的服務(wù)啟動端口
infos是mongodb的一個數(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 定義Schemaconst userSchema = new mongoose.Schema({})
通過mongoose對象的Schema屬性創(chuàng)建一個Schema對象
Schema原意為架構(gòu)
在mongodb中,每一個數(shù)據(jù)字段都要有固定的數(shù)據(jù)類型,所以Schema在mongoose中的意思為,每一張數(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 代碼分析
需要熟練使用Express的router方法
引入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
摘要:類比一下你有一個巨型停車場,里邊分了不同的停車區(qū)集合,這里的,每個停車區(qū)可以停很多車下文提到的,相當于每個數(shù)據(jù)集合里邊可以有很多張數(shù)據(jù)表。 Node.js利用mongoose連接mongodb數(shù)據(jù)庫 Node.js連接mongodb數(shù)據(jù)庫有很多種方法,通過mongoose模塊引入是其中的一個方法 代碼組織結(jié)構(gòu) |---|根目錄 |---|---|connect.js(mongoose測...
摘要:搭建后臺的全過程近期基于搭建前端項目,搭建后臺,遇到了不少問題,總結(jié)博客如下,有什么不正確的地方,請大家批評指正是非關(guān)系型數(shù)據(jù)庫。是用來啟動的,是的命令行客戶端。 Node + mongoDB 搭建后臺的全過程 近期基于 vue-cil 搭建前端項目, express + mongoose 搭建后臺,遇到了不少問題,總結(jié)博客如下,有什么不正確的地方,請大家批評指正^?_?^! mong...
摘要:前言要做一個全沾的工程師,對于后端和數(shù)據(jù)庫來說,即使不認識也要見個面的?;玖私獾母拍罹秃茫饕前惭b上數(shù)據(jù)庫,并進行簡單的增刪操作。 前言:要做一個全沾的工程師,對于后端和數(shù)據(jù)庫來說,即使不認識也要見個面的。本文給的例子很簡單,也貼出來源碼,只要一步步下來,就可以跑起來啦~~~ 思考一個需求:做一個登錄頁面,自己搭建服務(wù)和數(shù)據(jù)庫,將用戶輸入的登錄信息保存到數(shù)據(jù)庫如何完成呢:首先選擇...
摘要:本文源碼簡介之前剛?cè)腴T并做好了一個簡而全的純?nèi)彝暗捻椖?,?shù)據(jù)都是本地模擬請求的詳情請移步這里為了真正做到數(shù)據(jù)庫的真實存取,于是又開始入門了并以此來為之前的頁面寫后臺數(shù)據(jù)接口。 本文源碼:Github 簡介: 之前剛?cè)腴Tvue并做好了一個簡而全的純vue2全家桶的項目,數(shù)據(jù)都是本地 json 模擬請求的;詳情請移步這里:vue-proj-demo 為了真正做到數(shù)據(jù)庫的真實存取,于是又...
摘要:的邏輯結(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ù)插入操作之前,我們先來簡單...
閱讀 2611·2021-10-14 09:43
閱讀 3570·2021-10-13 09:39
閱讀 3304·2019-08-30 15:44
閱讀 3154·2019-08-29 16:37
閱讀 3718·2019-08-29 13:17
閱讀 2742·2019-08-26 13:57
閱讀 1834·2019-08-26 11:59
閱讀 1260·2019-08-26 11:46