[expressjs/express]处理 405

2024-07-04 245 views
9

如何处理 405?这里有一个简单的方法:

在https://github.com/expressjs/express/blob/master/lib/router/index.js#L253上插入代码

        if (method !== 'OPTIONS') req.notAllowedRoute = route

然后我可以通过以下方式处理 405:

const notAllowedHandler = (req, res, next) => {
    if (req.notAllowedRoute) {
        res.header('Allow', Object.keys(req.notAllowedRoute.methods).join(', ').toUpperCase())
        res.status(405)
    } else {
        next()
    }
}

回答

9

这是否意味着我需要处理每条路线的 405?

3

目前是的。您提出的解决方案对于路由器来说相当复杂,因为当前 API 支持的组合数量非常多。我现在不在电脑旁,但我可以试着在回来时概述一下我的意思。

8

如果路由器可以在请求上存储“仅匹配的路径路由”和/或“匹配的路径和方法路由”,那么我就可以用最少的代码处理 405。

抱歉我的英语不好。?

3

你的英语不差吗?

今晚晚些时候,我会写一些边缘情况的例子,以及为什么我认为它不是那么简单。

4

我认为这两种方法都是实现最终目标的通用途径。如果我们朝其中一个方向发展,那么这个问题就迎刃而解了。@wangfengming 也许你可以在那里发表评论,以推动这些进展?

8

PR #2703 已经打开,允许配置路由器和路由以自动响应状态 405,并添加到 4.17 里程碑 :+1:

6

我将关闭此问题,因为它似乎已得到答复/解决并且一年多来没有任何活动。