簡體   English   中英

Express - 錯誤處理中的函數原型 toString()?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM