mongoose schema被分成几个文件,如何要求?

时间:2016-09-24 20:15:01

标签: node.js mongodb

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

任何建议?感谢

2 个答案:

答案 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。