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');