まず、node.js、express.js、mongoose.js/mongodb を使用しています。
次のようにトラフィックをルーティングしようとしています。
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>
エラーは、ページをレンダリングしたり、応答を送信したりしようとしたときにのみ発生します。私は困惑しています!私の質問は、このクエリが正しく処理されているように見えるのに、エラーが発生するのはなぜですか?