2016-02-25 71 views
0

我试图建立一个嵌套的猫鼬文档这样:
型号/ data.js添加到猫鼬嵌套文件

var mongoose = require('mongoose'); 

var addresses = new mongoose.Schema({ 
    "street": String, 
    "city": String, 
    "state": String, 
    "zip": Number, 
}); 

var recipes = new mongoose.Schema({ 
    "recipe1": String, 
    "recipe2": String, 
    "recipe3": String, 
    "recipe4": String, 
    "recipe5": String, 
}); 

var home = new mongoose.Schema({ 
    "name": String, 
    "image": String, 
    "recipe": [recipes], 
}); 

var away = new mongoose.Schema({ 
    "name": String, 
    "image": String, 
    "recipe": [recipes], 
    "address": [addresses], 
}); 

var foods = new mongoose.Schema({ 
    "home": [home], 
    "away": [away], 
}); 

var users = new mongoose.Schema({ 
"username": String, 
"firstname": String, 
"lastname": String, 
"email": String, 
"password": String, 
"address": [addresses], 
}); 

var data = new mongoose.Schema({ 
    "users": [users], 
    "foods": [foods], 
}); 

exports.Data = mongoose.model('data', data); 

add.js

var data = require('../models/data.js'); 

exports.update = function(req, res){ 
    // create a user in a Room 
    var data = new data.Data(); 

    data.users.push({ username: 'Joe' }); 

    data.save(function (err) { 
    if (!err) console.log('Success!'); 
    }); 
}; 

什么我想do是将一个名称添加到嵌套文档中。但是,当我运行该程序,并从客户端(jQuery Mobile的)提交我的形式,我得到一个错误,指出:

TypeError: Cannot read property 'Data' of undefined 
    at exports.update (..\routes\add.js:5:20) 
    at callbacks (..\node_modules\express\lib\router\index.js:164:37) 
    at param (..\node_modules\express\lib\router\index.js:138:11) 
    at pass (..\node_modules\express\lib\router\index.js:145:5) 
    at Router._dispatch (..\node_modules\express\lib\router\index.js:173:5) 
    at Object.router (..\node_modules\express\lib\router\index.js:33:10) 
    at next (..\node_modules\express\node_modules\connect\lib\proto.js:174:15) 
    at Immediate.<anonymous> (..\node_modules\express\node_modules\connect\node_modules\express-session\index.js:433:7) 
    at Immediate.immediate._onImmediate (timers.js:440:18) 
    at processImmediate [as _immediateCallback] (timers.js:383:17) 

我想知道我在做什么错。谢谢!

回答

0

在您的add.js文件中,您将覆盖外部范围中的data变量并使其无法访问。

下面是该问题的一个简单的例子:

var data = { x: 1 } // define data in an outer scope 

function foo() { 
    // the next line overwrites the outer scope data var, causing an error 
    var data = data.x 
    console.write(data) 
} 

foo() 

要解决该问题,请更新app.js文件看起来像这样:

var Data = require('../models/data.js').Data; 

exports.update = function(req, res){ 
    // create a user in a Room 
    var data = new Data(); 

    data.users.push({ username: 'Joe' }); 

    data.save(function (err) { 
    if (!err) console.log('Success!'); 
    }); 
}; 
+0

它的工作!太感谢了!! – mertwo