2016-09-24 39 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');