同步發表到驢形筆記
上一篇中使用的"mongoose"有許多定義好的方法可以使用,最好先宣告幾個方法統一呼叫才會比較方便。請跟著下面的流程好好的重構一下程式碼!
個人習慣針對資料庫的操作會統一宣告在一個資料夾內保管,所以首先建立資料夾"models"在建立放置資料庫模型的js檔"schemaModels.js"然後依照練習用的範例資料庫一一建立模型
models\schemaModels.js
let mongoose = require('mongoose');
const accounts = new mongoose.Schema({
account_id: { type: Number},
limit: { type: Number},
products: { type: Array},
});
const customers = new mongoose.Schema({
username: { type: String},
name: { type: String},
address: { type: String},
birthdate: { type: Date},
email: { type: String},
accounts: { type: Array},
tier_and_details: { type: Object},
});
const transactions = new mongoose.Schema({
account_id: { type: Number},
transaction_count: { type: Number},
bucket_start_date: { type: Date},
bucket_end_date: { type: Date},
transactions: { type: Array},
});
const schema = {
accounts: mongoose.model('accounts', accounts, 'accounts'),
customers: mongoose.model('customers', customers, 'customers'),
transactions: mongoose.model('transactions', transactions, 'transactions'),
}
module.exports = schema;
將資料庫下面的table定義好模型,然後開啟宣告各種操控資料庫的方法。在同一個資料夾下新增"mongoDB.js",進行修改。下面是最簡單的使用方法,mongoose有提供非常多的方法可以使用。但在這一系列只要可以用就可以了,未來有興趣或碰到問題再到mongoose的官方文件查詢更多的API(或是改使用mongoDB)
models\mongoDB.js
const schemaModels = require('./schemaModels');
const mongoose = require('mongoose');
function create (collectionName, inserObject) {
return new Promise(function (resolve, reject) {
let data = new schemaModels[collectionName];
for (let key in inserObject) {
data[key] = inserObject[key];
}
data.save(function (err, data, count) {
if (err) reject(err);
resolve(data);
});
})
}
function read (collectionName) {
return schemaModels[collectionName].find().sort('time'); //可以加正負號 -號是小的在前
}
function update (collectionName, id, inserObject) {
return new Promise(function (resolve, reject) {
inserObject.time = moment().valueOf();
schemaModels[collectionName].findById(id, function (err, data) {
for (let key in inserObject) {
data[key] = inserObject[key];
}
data.save(function (err, todo, count) {
if (err) reject(err);
resolve(data);
});
})
})
}
function destroy (collectionName, id) {
return new Promise(function (resolve, reject) {
schemaModels[collectionName].findById(id, function (err, data) {
data.remove(function (err, data) {
if (err) return reject(err);
resolve(data);
});
});
});
};
mongoose.connect('mongodb+srv://ItHelp_Donkey:ItHelp_Donkey@cluster0.acbw6.gcp.mongodb.net/sample_analytics?retryWrites=true&w=majority', {
useNewUrlParser: true,
useUnifiedTopology: true
});
module.exports = {
create,
read,
update,
destroy
};
好的,再次回到一開始呼叫的位置 app.js 把原本那段換掉,直接用發法呼叫資料庫方法。
app.js
略
let DB = require('./models/mongoDB');
DB.read('accounts').then(res=>{
console.log(res);
})
module.exports = app;
好的,未來要對資料庫進行CRUD就只要有這四個統一宣告好的方法就可以了