我正在用Node.js,Express和Mongoose/MongoDB構建一個Web應用程序。創建Mongoose組織/類結構?
我遇到的一個問題是如何正確組織和構建與貓鼬有關的方法。我需要在我的路由中調用Mongoose功能,但所有示例均顯示使用Mongoose調用,而不用用原型構建單獨的文件或類。
IE。設置在線路
SiteModel.find({}, function(err, docs) {
if (!err){
console.log(docs);
process.exit();
} else {throw err;}
});
架構,並呼籲貓鼬,我想放貓鼬CRUD功能相關的邏輯和功能的輔助文件內,並呼籲他們在我的路線。當我用貓鼬單獨的類方法,不返回值(或者由於異步本性,我無法使用的結果),我創建一個服務對象
//Router file
var myService = require('../helpers/ServiceStatus');
router.get('/', authService.isLoggedIn, function(req,res){
var serviceObject = new myService(); //Initialize class with Mongoose functions
async.parallel({
modelAFind: function(cb){
//Mongoose class method is called
var response= serviceObject.getAllServiceDetails();
cb(null, response);
},
modelBFind: function(cb){
cb(null, 2); //filler
}
}, function(results){
console.log("Results of query: " + results);
});
片段從我的貓鼬類:
//ServiceStatus.js
//Constructor
function ServiceStatus() {
}
ServiceStatus.prototype.getAllServiceDetails = function(){
var query = SiteModel.find({});
var promise = query.exec();
promise.then(function (doc) {
return doc;
});
};
處理異步,使用Mongoose邏輯構造單獨的幫助器文件並在路由中調用它們的最佳方式是什麼?promises,帶回調函數等?謝謝。
*編輯 - 添加的架構文件
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
// set up a mongoose model
module.exports = mongoose.model('SiteModel', new Schema({
id: String,
service: {type: String, unique: true, required: true},
status: String,
settings: Object,
lastCheck: String
}
,{
timestamps: true
}));
嗨保羅,這是很棒的信息。我附加了模型的模式文件。對於特定的「getter」和「setter」查詢,你會在Mongoose模式中編寫所有的函數而不是單獨的文件嗎? – Jacob
是的,絕對會這樣做。我只爲跨越多個模型的邏輯創建服務類。 – Paul