#javascript #mongodb #node.js #express #mongoose
#javascript #mongodb #node.js #выразить #mongoose
Вопрос:
я использую express.js с помощью mongoose для доступа к MongoDB. я пытаюсь реализовать запасной вариант, если кто-то вводит 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 не существует, он должен напечатать СБОЙ!, если идентификатор существует, он должен получить его содержимое из базы данных (это действительно работает). это то, что я получаю сейчас при вводе неправильного идентификатора (приложение вылетает):
/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)
Ответ №1:
Возврат данных для идентификатора, который не существует, является нормальной операцией, а не ошибкой, и поэтому err не устанавливается.
Попробуйте изменить if (!err)
на if (!err amp;amp; user_)
.
Ответ №2:
попробуйте переключить параметры обратного вызова >
User.findById(user_id, function(user_, err ) {
if (!err) {
res.render('track', { pins: user_.pins, layout: false });
} else {
res.send("FAIL! " err);
}
});
Комментарии:
1. наверняка что-то не так с параметрами. Ошибка, по-видимому, заключается в том, что он
!err
возвращает true, даже когда пользователь не существует, а затем выдает ошибку о том, что pins не существует, в то время как родительский кодuser_
существует. можете ли вы использоватьconsole.log()
и посмотреть, какие два параметра передаются в случае, если user не существует?