2016-09-24 33 views
1

在nodejs中做mongoose db。 我收到错误:“架构未定义”。猫鼬模式被分解成几个文件,如何要求?

在我的模型

我有2个文件不同的模式:用户和产品,它们看起来像水木清华:

'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 = require('../models/userSchema'); 
var products= require('../models/productSchema'); 

任何意见?感谢

+0

我认为这是指'新的架构'中的代码。导入猫鼬后,执行'const Schema = mongoose.Schema'(如果需要,可以使用'var')。如果使用ES6导入,您还可以从'mongoose'''导入mongoose,{Schema} –

+0

对给定答案的任何反馈? – qqilihq

回答

0

你可以通过将它们放入应用程序中,摆脱要求代码中的猫鼬模型。

添加index.js文件的文件夹中(比方说, '模型'),其中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 ACRO ss应用程序。

+0

你能详细解释一下require(“./app/models”)(app)吗?谢谢。 – Margot

+0

好吧,我想通了,但现在,当我通过你的例子添加任何其他数据库js文件,我没有看到我的数据库中的集合。 – Margot

+0

谢谢,Talha阿万,为我工作! – Margot

1

要解决“的模式没有被定义”的问题,进口猫鼬架构:

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

对于出口,我建议如下。没有理由巢状此外,当你定义每个文件一个模型:

var userModel = mongoose.model('User', userSchema); 
module.exports = userModel; 

然后,你可以要求在其他文件中的模型如图所示在您的文章,如:

var users = require('../models/userSchema');