Mongooseモデルを別のファイルに分けたいのですが。私はこのようにしようとしました:
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;
var Material = new Schema({
name : {type: String, index: true},
id : ObjectId,
materialId : String,
surcharge : String,
colors : {
colorName : String,
colorId : String,
surcharge : Number
}
});
var SeatCover = new Schema({
ItemName : {type: String, index: true},
ItemId : ObjectId,
Pattern : String,
Categories : {
year : {type: Number, index: true},
make : {type: String, index: true},
model : {type: String, index: true},
body : {type: String, index: true}
},
Description : String,
Specifications : String,
Price : String,
Cost : String,
Pattern : String,
ImageUrl : String,
Materials : [Materials]
});
mongoose.connect('mongodb://127.0.0.1:27017/sc');
var Materials = mongoose.model('Materials', Material);
var SeatCovers = mongoose.model('SeatCover', SeatCover);
exports.Materials = Materials;
exports.SeatCovers = SeatCovers;
次に、このようなモデルを使用しようとしました:
var models = require('./models');
exports.populateMaterials = function(req, res){
console.log("populateMaterials");
for (var i = 0; i < materials.length; i++ ){
var mat = new models.Materials();
console.log(mat);
mat.name = materials[i].variantName;
mat.materialId = materials[i].itemNumberExtension;
mat.surcharge = materials[i].priceOffset;
for (var j = 0; j < materials[i].colors.length; j++){
mat.colors.colorName = materials[i].colors[j].name;
mat.colors.colorId = materials[i].colors[j].itemNumberExtension;
mat.colors.surcharge = materials[i].colors[j].priceOffset;
}
mat.save(function(err){
if(err){
console.log(err);
} else {
console.log('success');
}
});
}
res.render('index', { title: 'Express' });
};
これは、別のモジュールでモデルを参照するための合理的なアプローチですか?
基本的なアプローチは合理的に見えます。
オプションとして、モデルとコントローラーの機能が統合された「プロバイダー」モジュールを検討できます。そうすれば、app.jsでプロバイダーをインスタンス化し、すべてのコントローラー機能をプロバイダーで実行できます。 app.jsは、実装する対応するコントローラー機能を持つルートのみを指定する必要があります。
少し整理するために、これらのモジュール間の接着剤としてapp.jsを使用して、ルートを別のモジュールに分岐することも検討できます。
Nconfを使用して構成できるように、データベースをモデルファイルの外部で定義するのが好きです。もう1つの利点は、モデルの外部でMongo接続を再利用できることです。
module.exports = function(mongoose) {
var Material = new Schema({
name : {type: String, index: true},
id : ObjectId,
materialId : String,
surcharge : String,
colors : {
colorName : String,
colorId : String,
surcharge : Number
}
});
// declare seat covers here too
var models = {
Materials : mongoose.model('Materials', Material),
SeatCovers : mongoose.model('SeatCovers', SeatCover)
};
return models;
}
そして、あなたはこのように呼ぶでしょう...
var mongoose = require('mongoose');
mongoose.connect(config['database_url']);
var models = require('./models')(mongoose);
var velvet = new models.Materials({'name':'Velvet'});