私はNode.js、Express、Mongoose/MongoDBでWebアプリケーションを構築しています。マングース組織/クラス構造を作成していますか?
私が持っていた1つの質問は、どのようにモンゴースに関連する方法を正しく構成し、構造化するかということでした。ルート内でMongooseの機能を呼び出す必要がありますが、すべての例では、Mongooseの呼び出しを使用して、プロトタイプで別のファイルやクラスを構成することなく表示しています。
IE。スキーマを設定すると、私はロジックと機能性に関連するヘルパーファイル内のマングースのCRUD機能を入れて、私のルートでそれらを呼び出したいルート
SiteModel.find({}, function(err, docs) {
if (!err){
console.log(docs);
process.exit();
} else {throw err;}
});
でマングースを呼び出します。私はマングースと別のクラスのメソッドを使用する場合は、何も値を返さない(または起因する非同期性のために、私は結果を使用することができません)され
//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ロジックを持つ別々のヘルパーファイルを構造化し、それらをルートで呼び出すことです:約束事、コールバック付き関数など?ありがとう。
*編集 - 追加されたスキーマだから
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