2011-05-30 43 views
0

我使用expressong.js與mongoose進行mongoDB訪問。如果有人輸入一個不存在的url(基於user_id),我嘗試執行回退。下面的代碼:express.js + mongoose:回退不正確的ID?

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) 

回答

1

沒有返回數據爲不存在的ID是正常的操作,而不是錯誤,所以err沒有被設置。

嘗試更改if (!err)if (!err && user_)

+0

做到了。謝謝! – Tronic 2011-06-03 14:04:46

-1

請嘗試關閉回調參數>

User.findById(user_id, function(user_, err) { 
    if (!err) { 
     res.render('track', { pins: user_.pins, layout: false }); 
    } else { 
     res.send("FAIL! " + err); 
    } 
}); 
+0

nope,不起作用,參數是正確的... – Tronic 2011-05-30 12:36:42

+0

肯定是有問題的參數。顯然錯誤在於,即使用戶不存在,'!err'也會返回true,然後在父'user_'出現錯誤時引腳不存在。你可以使用'console.log()'看看在用戶不存在的情況下傳遞的兩個參數是什麼? – neebz 2011-05-30 12:59:40