我不确定我是否正确理解了您的问题。据我了解,您希望将您对 / 的 POST 请求重定向到对 /login 的 POST 请求,这可能会很棘手。
通常您通过发送 301 Moved Permanently 或 302 Found HTTP 状态代码来进行重定向。它们在实践中通常都像 303 See Other 并发出 GET 请求一样工作。参见维基百科上的List of HTTP status codes:
这是一个与标准相矛盾的行业实践示例。
HTTP/1.0 规范 (RFC 1945) 要求客户端执行
临时重定向(原始描述短语是“已移动
暂时”),但流行的浏览器实现了 302
303 的功能参见其他。因此,HTTP/1.1 增加了状态
代码 303 和 307 来区分这两种行为。
但是,一些 Web 应用程序和框架使用 302 状态码
好像是 303。
创建了一个 307 临时重定向(自 HTTP/1.1 起)来解决不允许更改 HTTP 方法的问题 - 因此来自 POST 的重定向仍应为 POST - 请参阅 Wikipedia:
在这种情况下,应该使用另一个 URI 重复请求;
但是,未来的请求仍应使用原始 URI。在
与历史上 302 的实现方式相比,请求方法
重发原请求时不允许更改。为了
例如,应该使用另一个 POST 重复一个 POST 请求
请求。
据我所知,浏览器应该在遵循此类重定向之前警告用户。我不知道这在实践中是如何工作的。我不会依赖它,因为它充其量会给用户带来烦恼,甚至根本不起作用。
我的建议是改变这个:
app.post('/login', function (req, res) {
// logic
});
到这里:
function loginHandler(req, res) {
// logic
}
app.post('/login', loginHandler);
app.post('/', loginHandler);
或类似的东西,使用正则表达式:
app.post(/^\/(?:login)?$/, function (req, res) {
// logic
});
这样,相同的处理程序将用于这两个路由,而不是重定向。它会更快、更健壮,因为这样您就不必依赖重定向工作 - 根本没有重定向。