当错误与 ,req,res 和 next 一起传递时,Express js 中间件不工作

Express js middleware not working when error is passed alongside ,req,res and next

所以,我正在尝试在 express 中实现 CSRUF,我希望抛出自定义错误而不是中间件的默认错误处理 CSRUF example here。 CSRF 实现正常工作,当令牌无效时,控制台会抛出一个错误,并向浏览器发送一个 403 状态的响应。 我不希望默认处理错误。 当我如下创建自定义错误处理程序中间件时,

 function (err,req, res, next) {
    console.log("reached")
    if (err.code !== 'EBADCSRFTOKEN') return next(err)

    console.log("Not working")
    // handle CSRF token errors here
    res.status(500)
    res.send('form tampered with')
}

似乎中间件没有被实现,因为 CSRUF 的默认错误被抛出。

有趣的是,我注意到当我有一个带有错误参数的自定义中间件时,中间件似乎被应用程序忽略了。 示例(这个有效)

 function (req, res, next) {
     console.log("This is some middleware") //Console outputs
      next()
   
}

但是,当我如下向函数添加错误或错误参数时,看起来好像没有使用中间件

function (req, res, next) {
         console.log("This is some middleware.Err parameter has been passed") //Nothing is output to console
         next()
    }

我已阅读 Express error handling documentation 并按要求完成,但我仍然遇到错误,可能是什么问题,我该如何处理。

我终于明白了。 当我在 CSRUF 之后放置错误处理程序中间件时,一切正常,即

app.post(route,middleware1,errorhandler,(req,res)={
//Any errors from middleware1 will now be catched by the errorhandler instead of the default error handler
//Some code here
})

错误处理程序的位置似乎起着重要作用