2014-03-12 21 views
0

首先,我使用node.js,express.js,mongoose.js/mongodb。
我試圖路由流量如下:如何呈現使用mongoose.js查詢的內容?

app.get('/:username/:language', pageRoutes.fetchLanguage); 

當我處理以下問題,我似乎得到了預期的效果(當我打印到CONSOLE.LOG我看到預期的輸出)。但是,當我嘗試以任何方式呈現頁面時,都會出現錯誤。

var User = require('./../models/user-model'); 
var Language = require('./../models/language-model'); 
var Element = require('./../models/element-model'); 

exports.fetchLanguage = function(req, res) { 
    var target_lang = req.params.language; 

    // Find the user by username, so that I can get their _id 
    User.findOne({username: req.params.username}, {_id: 1}, function(err, userdoc){ 

     // This prints the _id as expected 
     console.log(userdoc._id); 

     // Find all languages associated with that user _id 
     // (just need a list of language names) 
     Language.find({_user_id: userdoc._id}, {name: 1}, function(err, languages){ 

      // Find the one language that was requested 
      Language.findOne({_user_id: userdoc._id, name: target_lang}).populate('sections.elements').exec(function(err, languagedoc){ 

       // I can log the expected query results... 
       console.log(JSON.stringify(languagedoc, undefined, 2)); 
       console.log(JSON.stringify(languages, undefined, 2)); 
       // But as soon as i try to render, things go wrong 
       res.render('test', {languages: languages, language: languagedoc}); 
      }); 
     }); 
    }); 

以下是錯誤:

Language.find({_user_id: userdoc._id}, {name: 1}, function(err, langua 
            ^

TypeError: Cannot read property '_id' of null 
at Promise.<anonymous> 

錯誤只有當我試圖渲染頁面/發送響應發生。我很困惑!我想我的問題是:爲什麼這個查詢似乎正確處理,但也產生一個錯誤?

回答

0

原來我只是需要刪除_id的查找操作

// This is correct 
Language.find({_user_id: userdoc}, {name: 1}, function(err, languages) { 
// NOT this 
Language.find({_user_id: userdoc._id}, {name: 1}, function(err, languages) {