[英]get object of returned mongoose find
嗨,我正在嘗試訪問貓鼬中的查找返回的元素,並且在異步和回調情況下遇到了一些麻煩。
這是用於更好理解的代碼。
function retrieveBudgets(email, callback) {
models.User.find({email: email},{budget:true}, function(err,budgets) {
if (err) {
callback(err, null);
} else {
callback(null, budgets);
}
});
};
retrieveBudgets(user.email, function(err, budgets) {
if (err) {
console.log(err);
}
budgets.forEach(function(budget){
console.log(JSON.stringify(budget, null, 4));
});
});
所以這行console.log(JSON.stringify(budget, null, 4));
正常工作,並以json格式將對象打印到屏幕上,但是如何從此處將每個對象存儲到對象數組? 如果我嘗試在同一行推送到數組,則會收到錯誤消息。
我已經看到一些類似的問題,但是我並沒有取得任何進展。 編輯:____________________________________________________________________________我做了一點修改,使其正常工作,我將res.render移到了上面,以便在回調的同時完成頁面的渲染,但是我不能認為這是正確的解決方案
var user=req.session.user;
res.locals.budgets=[];
function retrieveBudgets(email, callback) {
models.User.find({email: email},{budget:true}, function(err, budgets) {
if (err) {
callback(err, null);
} else {
callback(null, budgets);
}
});
};
retrieveBudgets(user.email, function(err, budgets) {
if (err) {
console.log(err);
}
res.locals.budgets = budgets.map((function(b){ return b; });
res.render('budget/budget.jade',{ csrfToken: req.csrfToken() });
});
這樣行之有效的,我可以通過當地人獲得預算,因此對此是否有任何反饋都是很好的,我懷疑這樣做是否正確?
您從retrieveBudgets
調用獲得的budgets
返回值已經是一個數組。
您對budgets.forEach
的調用證明了這一點,該方法是數組的一種方法。
有沒有必要根據這些物品創建一個新的陣列? 可以很容易做到:
var myNewArray = budgets.map((function(b){ return b; });
這一行代碼會將原始的預算數組映射到包含每個預算項目的新數組。
還有其他創建新數組的方法,具體取決於您需要執行的操作
從下面的評論更新
我真正想做的是在查詢外部使用預算,以便將其傳遞給視圖
在這種情況下,您需要從回調中渲染視圖並將預算傳遞給視圖:
router.get("/foo", function(req, res, next){
retrieveBudgets(user.email, function(err, budgets) {
if (err) { return next(err); }
res.render('budget/budget.jade',{
budgets: budgets,
csrfToken: req.csrfToken()
});
});
});
這是完成這項工作的唯一且正確的方法。
如果您嘗試執行此操作而不等待回調完成,則budgets
數組中將沒有任何數據。 因此,您必須等待回調執行完畢,然后將budgets
(或單一budget
或其他budget
)傳遞給視圖來呈現視圖。
(使用promise可以做到這一點,但我發現回調是處理此問題的更簡便方法。)
轉行將對象傳遞到玉文件的行
res.render('budget/budget.jade',{
csrfToken: req.csrfToken(),
budgets: budgets.map(function(b) {return b;})
});
這會將budgets
傳遞到您的玉器文件,您應該可以在其中訪問它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.