2016-02-25 2 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 мобильный), я получаю сообщение об ошибке, которая говорит:

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