[英]Babel 7: Function.prototype.toString: 'this' is not a Function object
[英]Express - function prototype toString() in error handling?
我在 Express 吐出 HTML 字符串而不是 JSON 時遇到了一個長期問題,當時我們顯然試圖強制 JSON 總是從服務器中出來,無論如何 -
事實證明這是我的錯誤處理中間件中的一個問題 - 我錯過了下一個參數,例如:
這是失敗的:
app.use(function (err, req, res) {
res.status(err.status || 500).json({
error: 'sorry the API experienced an error serving your priority request'
});
});
這是正確的行為:
app.use(function (err, req, res, next) {
res.status(err.status || 500).json({
error: 'sorry the API experienced an error serving your priority request'
});
});
如您所見,添加第四個參數“next”允許 Express 將其識別為錯誤處理回調函數。
我的問題是 - Express 如何知道第四個參數到位,更不用說參數的類型了? 我唯一的猜測是 Express 正在使用 Function.prototype.toString() 來查看參數的數量。 或者他們正在以另一種方式這樣做?
正如它在評論中所寫的那樣,它使用Function.length
length
是函數對象的一個屬性,表示函數期望的參數數量,即形式參數的數量。
下面是來自 express 存儲庫的代碼片段:
Layer.prototype.handle_error = function handle_error(error, req, res, next) {
var fn = this.handle;
if (fn.length !== 4) {
// not a standard error handler
return next(error);
}
try {
fn(error, req, res, next);
} catch (err) {
next(err);
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.