mongoose模式被分解成几个文件,如何要求?
在nodejs中做mongoose db。 我得到一个错误:“架构没有定义”。
在我的模型中,我有两个不同模式的文件:用户和产品,他们看起来像这样:
'use strict'; var mongoose = require('mongoose'), bcrypt = require("bcryptjs"); var UsersSchema = new Schema({ name: String, email: String, telephone: Number, createdAt: {type: Date, default: Date.now}, updatedAt: {type: Date, default: Date.now} }); var userModel = mongoose.model('User', userSchema); module.exports.userModel = userModel;
我没有任何路线,在app.js中,我有:
var users = mongoose.model('User', userSchema); var products = mongoose.model('Product', productSchema);
以前我试过:
var users = require('../models/userSchema'); var products= require('../models/productSchema');
任何build议? 谢谢
您可以通过将它们放在应用程序中来摆脱要求代码中的mongoose模型。
在放置user.js和product.js的文件夹(比如'models')中添加index.js文件:
var fs = require('fs'); var path = require('path'); module.exports = function(app) { app.models = app.models || {}; fs.readdirSync(__dirname).forEach(function(file) { if (file !== "index.js" && path.extname(file) === '.js'){ var model = require(path.join(__dirname,file))(app); app.models[model.modelName] = model; } }); };
将user.js(和类似的product.js)文件更改为
'use strict'; var mongoose = require('mongoose'), Schema = mongoose.Schema, bcrypt = require("bcryptjs"); module.exports = function(){ var UsersSchema = new Schema({ name: String, email: String, telephone: Number, createdAt: {type: Date, default: Date.now}, updatedAt: {type: Date, default: Date.now} }); return mongoose.model("User", UsersSchema); //the name "User" here will be stored as key in app.models and its value will be the model itself };
在app.js中插入一行
require("./app/models")(app) //pass app to the index.js, which will add models to it
现在,您可以在应用程序中使用app.models.User和app.models.Product。
要解决“模式未定义”问题,请导入Mongoose模式:
var mongoose = require('mongoose'); var Schema = mongoose.Schema;
对于出口,我会build议如下。 没有理由额外嵌套,当你为每个文件定义一个模型时:
var userModel = mongoose.model('User', userSchema); module.exports = userModel;
然后,您可以在您的post中显示的其他文件中要求模型,例如:
var users = require('../models/userSchema');