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
地点 -
27017
是mongodb
的效劳启动端口 infos
是mongodb
的一个数据鸠合名字-
mongodb
能够有许多数据鸠合,每一个鸠合中能够有许多数据表。 - 类比一下:你有一个巨型泊车场(
mongodb
),里边分了差别的泊车区(鸠合
,这里的infos
),每一个泊车区能够停许多车((下文提到的user
),相当于每一个数据鸠合里边能够有许多张数据表)。
-
假如须要给
mongodb
加上用户及暗码,能够如许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
中,每一个数据字段都要有牢固的数据类型,所以
Schema
在
mongoose
中的意义为,每一张数据表对应的字段的数据类型
Schema
所能够具有的数据类型有以下几个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 代码剖析
- 须要闇练运用
Express
的router
要领 - 引入
Express
,定义一个post
要领 -
post
要领通报的对象数据挂在在req.body
上 - 直接挪用
operate.save()
要领,通报param
对象参数 - 猎取到返回效果
result
,对猎取到的效果举行进一步处置惩罚