我有這樣的代碼使Express.js日誌錯誤:如何在異步操作
exports.listSavedThreads = function (req, res) {
SavedThread.find({}).exec().then(function (data) {
wat.map();
res.render('home/listSavedThreads');
});
};
wat
是不確定的變量,因此上面的代碼不工作,res.render()
不會被調用,但什麼都沒有打印到控制檯,它無聲無息地失敗,瀏覽器陷入無盡的負載。
如果我做同樣的未經許:正在打印到控制檯和瀏覽器
exports.listSavedThreads = function (req, res) {
wat.map();
res.render('home/listSavedThreads');
};
誤差,像往常一樣。
我已經能夠打印錯誤的唯一方法是通過使用try/catch
:
exports.listSavedThreads = function (req, res) {
SavedThread.find({}).exec().then(function (data) {
try {
wat.map();
res.render('home/listSavedThreads');
} catch(e) {
console.log('Error: ', e);
}
});
};
然後在控制檯中我看到:
Error: [ReferenceError: wat is not defined]
很顯然,我不能將try/catch
放到每個操作中,因爲我大多需要用於開發的錯誤輸出,所以我可以看到我的拼寫錯誤和類似的東西。有沒有辦法輸出所有操作的錯誤,甚至是異步的?
您正在正確使用try/catch。如果你的設計需要你一遍又一遍地寫相同的代碼,你可能會考慮一個功能分解或者如果你挖掘OO,使用多態可能也會清理它。 –
@NathanielJohnson,在我寫的每一個異步函數中放入'try/catch'都會帶來一點負擔,如果我需要的只是錯誤日誌。瀏覽器在承諾內打印錯誤就好,爲什麼Node不能?我認爲,我的配置可能有問題,但我不確定在哪裏尋找。 –