0

私はmongoDBアクセスのためにmongooseでexpress.jsを使用しています。誰かが (user_id に基づいて) 存在しない URL を入力した場合、フォールバックを実装しようとします。コードは次のとおりです。

app.get('/track/:id', function(req, res) {
var user_id = req.params.id;
User.findById(user_id, function(err, user_) {
    if (!err) {
        res.render('track', { pins: user_.pins, layout: false });
    } else {
        res.send("FAIL! " + err);
    }
});
});

http://foo.bar/track/1234にアクセスし、1234 が存在しない場合は、FAIL! を出力する必要があります。ID が存在する場合は、データベースからコンテンツを取得する必要があります (これは実際に機能します)。これは、間違った ID を入力したときに得られるものです (アプリがクラッシュします)。

/home/node/node-service/releases/20110530081158/server.js:112
            res.render('track', { pins: user_.pins, layout: false });
                                             ^
TypeError: Cannot read property 'pins' of null
    at /home/node/node-service/releases/20110530081158/server.js:112:46
    at /home/node/.node_libraries/.npm/mongoose/1.3.6/package/lib/mongoose/query.js:778:22
    at [object Object].<anonymous> (/home/node/.node_libraries/.npm/mongoose/1.3.6/package/support/node-mongodb-native/lib/mongodb/collection.js:462:35)
    at [object Object].emit (events.js:67:17)
    at [object Object].<anonymous> (/home/node/.node_libraries/.npm/mongoose/1.3.6/package/support/node-mongodb-native/lib/mongodb/db.js:94:12)
    at [object Object].emit (events.js:64:17)
    at Socket.<anonymous> (/home/node/.node_libraries/.npm/mongoose/1.3.6/package/support/node-mongodb-native/lib/mongodb/connection.js:86:16)
    at Socket.emit (events.js:64:17)
    at Socket._onReadable (net.js:671:31)
    at IOWatcher.onReadable [as callback] (net.js:177:10)
4

2 に答える 2

1

存在しない ID に対してデータを返さないのは正常な動作であり、エラーではないため、err は設定されていません。

に変更if (!err)してみてくださいif (!err && user_)

于 2011-05-30T14:51:49.120 に答える
-1

コールバック パラメータを切り替えてみてください >

User.findById(user_id, function(user_, err ) {
    if (!err) {
        res.render('track', { pins: user_.pins, layout: false });
    } else {
        res.send("FAIL! " + err);
    }
});
于 2011-05-30T09:15:38.043 に答える