express.js,如果我删除下一个参数,错误处理程序将不起作用
Posted
技术标签:
【中文标题】express.js,如果我删除下一个参数,错误处理程序将不起作用【英文标题】:express.js, error handler doesn't work if I remove next parameter 【发布时间】:2019-01-20 10:37:14 【问题描述】:我正在学习 Express.js
并使用他们的生成器生成了一个新应用:
npm install express-generator -g && express myapp
之后我在app.js
看到有这个代码:
// catch 404 and forward to error handler
app.use(function(req, res, next)
next(createError(404));
);
// error handler
app.use(function(err, req, res, next)
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get("env") === "development" ? err : ;
// render the error page
res.status(err.status || 500);
res.render("error");
);
正如您在图片中看到的那样,eslint
抱怨 next
参数,已声明但从未使用过。我同意,但如果我删除它 express
不会呈现错误页面。
为什么会有这种行为?
这对我来说很危险,因为我不再信任 eslint 或我的编码学位?我肯定错过了一些东西。 但是什么?
【问题讨论】:
What is the parameter "next" used for in Express?的可能重复 【参考方案1】:因为express中的错误处理是由参数个数决定的:
(function (req, res, next) ).length // 3
(function (err, req, res, next) ).length // 4
(function (err, req, res) ).length // 3
因此,如果您删除参数,错误处理程序将不再被视为错误处理程序。
这对我来说很危险,因为我不再信任 eslint 或我的编码学位?
如果 linter 比程序员更能理解代码……我们为什么需要程序员?
【讨论】:
请您解释一下好吗?【参考方案2】:这是 ESlint 的已知问题,但他们仍然没有解决该问题。 如果未使用 res、req 之一,ESlint 不会给出错误,但会在需要 4 个参数的错误处理程序中给出。 有两种解决方案,一种是针对此错误禁用 ESlint 的下一行,如下所示:
// eslint-disable-next-line no-unused-vars
app.use((error, req, res, next) =>
另一个我只在错误处理程序的末尾使用next()
,在发生错误时渲染或发送json后永远不会执行。
【讨论】:
【参考方案3】:next()
是处理异步错误所必需的。添加:
if (err)
next(err);
【讨论】:
请您解释一下好吗?【参考方案4】:Eslint 要求您使用传递给函数的所有参数。
对于您的情况,您有两个选择,在函数末尾执行 next () 或在 eslint cmets 中包含相同的函数:
/ * 禁用 eslint */ / * eslint-enable * /
【讨论】:
以上是关于express.js,如果我删除下一个参数,错误处理程序将不起作用的主要内容,如果未能解决你的问题,请参考以下文章
我无法恢复服务器 Express Js 中的 ID 以在我的 BD 中删除