我想将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将路由分支到一个单独的模块中,作为这些模块之间的粘合剂。