一、node系列之數據庫mongoose的封裝
1、mongoose介紹
Mongoose是在node.js異步環境下對mongodb進行便捷操作的對象模型工具
2、安裝mongoose
cnpm i mongoose -S
3、封裝目錄結構
|-sql
|-collection
-users.js
-db.js
-index.js
4、連接數據庫
一定要記得將連接數據庫的封裝成模塊 db.js
// db.js
const mongoose = require('mongoose');
// 1908shop 是表示數據庫的名稱
const DB_URL = 'mongodb://localhost:27017/1908shop';
mongoose.connect(DB_URL, { useNewUrlParser: true });
mongoose.connection.on('connected', () => {
console.log('數據庫連接成功')
})
mongoose.connection.on('disconnected', () => {
console.log('數據庫斷開')
})
mongoose.connection.on('error', () => {
console.log('數據庫連接異常')
})
// 將此文件作爲一個模塊 暴露出去,供別人調用
module.exports = mongoose;
4、創建數據庫模型,以用戶集合爲例
說明各個字段的數據類型,切記使用過程中一定要記得數據類型的正確性
// sql/collection/users.js
const mongoose = require('./../db.js'); // 引入數據庫連接模塊
const Schema = mongoose.Schema; // 拿到當前數據庫相應的集合對象
// 設計用戶表的集合
const userSchema = new Schema({ // 設計用戶集合的字段以及數據類型
userid: {type: String },
username: { type: String },
password: { type: String },
tel: { type: String }
})
module.exports = mongoose.model('User', userSchema);
5、封裝數據庫操作
搭建數據庫模塊sql/index.js
module.exports = {
insert () { // 插入
},
delete () { // 刪除
},
update () { // 更新
},
find () { // 查詢
} ,
paging () { // 分頁查詢
},
distinct () { // 按照分類查詢數據
}
}
5.1 插入操作封裝
module.exports = {
// 數據庫集合靠函數去傳遞
insert (CollectionName, insertData) {
// 數據庫的操作屬於異步操作,後續的業務邏輯會交給執行的那個單位
// A 調用了B B包含異步操作,操作完畢 A繼續執行業務邏輯
// 異步操作 --- 回調函數 / promise / generator + yeild / async + await
// User.insertMany(insertData, (err) => {
// if (err) throw err;
// console.log('插入成功')
// })
// promise的寫法
// return new Promise((resolve, reject) => {
// })
return new Promise((resolve, reject) => {
CollectionName.insertMany(insertData, (err) => {
if (err) throw err;
resolve()
})
})
},
}
5.2 刪除操作封裝
module.exports = {
delete (CollectionName, deleteData, deleteType) {
// User.deleteOne(deleteData, (err) => {})
// User.deleteMany(deleteData, (err) => {})
// style.display = "none" <===> style['display'] = "none"
// style.animation = "test" 兼容性
// 對象後的屬性不可以是變量,如果有變量,寫成 對象[屬性] 形式
deleteType = deleteType || 'deleteOne' // 默認爲刪除單條數據
return new Promise((resolve, reject) => {
CollectionName[deleteType](deleteData, (err) => {
if (err) throw err;
resolve()
})
})
}
}
5.3 更新操作封裝
module.exports = {
update (CollectionName, whereObj, updateObj, updateType) {
updateType = updateType || 'updateOne'
return new Promise((resolve, reject) => {
CollectionName[updateType](whereObj, updateObj, (err) => {
if (err) throw err;
resolve()
})
})
}
}
5.4 查詢操作封裝
module.exports = {
find (CollectionName, whereObj, showObj) {
return new Promise((resolve, reject) => {
CollectionName.find(whereObj, showObj).exec((err, data) => {
if (err) throw err;
resolve(data)
})
})
}
}
5.5 分頁查詢操作
pageCode 表示頁碼,從0開始
module.exports = {
paging (CollectionName, whereObj, showObj, limitNum, pageCode) {
return new Promise((resolve, reject) => {
// limit(limitNum) 每頁顯示個數
// skip(limitNum * pageCode) // 每頁從哪一個開始
CollectionName.find(whereObj, showObj).limit(limitNum).skip(limitNum * pageCode).exec((err, data) => {
if (err) throw err;
resolve(data)
})
})
},
}
5.6 按照分類查詢數據
module.exports = {
distinct(CollectionName, name) {
return new Promise((resolve, reject) => {
CollectionName.distinct(name).exec((err, data) => {
if (err) throw err;
resolve(data)
})
})
}
}
6、預告
下次分享node系列之登陸註冊接口的實現