我做了下面的函數來從ID獲取用戶名。它運作不好。 我可以編寫console.log(result.first_name);在查詢功能中,用戶名顯示在我的終端中,但不是瀏覽器。我試着在函數的末尾添加「返回」一些東西,以查看瀏覽器是否顯示出來 - 它的確如此。如何編寫函數以便返回查詢結果?從函數返回mongojs查詢結果
功能(在app.js全局函數)
function usernameFromId(id, callback){
db.users.findOne({ _id: ObjectId(id.toString()) }, function(err, result) {
var first_name = result.first_name;
console.log(first_name); // names show up in the console…
callback(first_name);
});
};
頁處理程序(在app.js)
app.get('/books', function(req, res){
function timeSince(dato){
moment.lang('nb');
return moment(dato).fromNow();
};
db.books.find().sort({ added:-1 }, function(err, docs) {
var books = docs;
db.activity.find().limit(9).sort({ time:-1 }, function(err, docs) {
var activity = docs;
res.render('books', {
books: books,
activity: activity,
timeSince: timeSince,
usernameFromId: usernameFromId
})
});
});
});
模板(books.jade)
- each a in activity
p=usernameFromId(a.user_id, function(name){return name;})
您可以將您的響應封裝在閉包中以使其更易於測試。然後將閉包作爲回調傳遞給查詢 - 這樣您就可以用模擬或其他不需要HTTP的東西替代它。看到我對我自己的類似問題的答覆在http://stackoverflow.com/questions/11972763/how-to-use-events-keep-mongodb-logic-out-of-node-js-request-handlers – fijiaaron 2012-08-27 16:01:34
這似乎是一個非常冒險的解決方案。我認爲這會比重複嵌套的mongojs查詢更直觀。 – 2017-06-22 17:43:46