在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');
任何建议?感谢
答案 0 :(得分:1)
要解决“架构未定义”问题,请导入Mongoose架构:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
对于出口,我建议如下。当你为每个文件定义一个模型时,没有理由另外嵌套这个:
var userModel = mongoose.model('User', userSchema);
module.exports = userModel;
然后您可以在帖子中显示的其他文件中要求模型,例如:
var users = require('../models/userSchema');
答案 1 :(得分:0)
您可以通过将它们放入应用程序来摆脱代码中需要mongoose模型的问题。
在文件夹中添加index.js文件(让我们说' models'),其中放置了user.js和product.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。