gpt4 book ai didi

javascript - Express - 错误处理中的函数原型(prototype) toString()?

转载 作者:行者123 更新时间:2023-11-30 00:20:24 25 4
gpt4 key购买 nike

我有一个长期存在的问题,即 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 is a property of a function object, and indicates how many arguments the function expects, i.e. the number of formal parameters.

下面是code fragment from express repository :

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);
}
};

关于javascript - Express - 错误处理中的函数原型(prototype) toString()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33379535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com