【问题标题】:Redirect POST to POST using Express JS routes使用 Express JS 路由将 POST 重定向到 POST
【发布时间】:2017-03-23 17:34:19
【问题描述】:

所以我有一个着陆页 ('/')。在这个页面上是一个带有提交按钮的用户名和密码的登录表单。我有加载页面的 app.get 和接收表单参数的 app.post。但是,我的意图是有一个 app.post('/login', function (req, res){ //logic});没有要加载的 /login 路由或页面,这只会包含登录本身的逻辑(验证用户名等)。是否有一种简单的方法可以从“/”获取帖子以重定向到 / 的帖子登录而不尝试加载不存在的 /login 页面?

【问题讨论】:

  • 如果有人在违反政策或我的问题因任何原因不可接受时通知我,而不是简单地否决它,那就太好了。
  • 下面我的回答对你有用吗?如果是这样,那么您可以考虑accepting the answer,以便其他搜索该问题的人会看到您的问题有一个可接受的答案。

标签: node.js express post get


【解决方案1】:

我不确定我是否正确理解了您的问题。据我了解,您希望将您对 / 的 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
}); 

这样,相同的处理程序将用于这两个路由,而不是重定向。它会更快、更健壮,因为这样您就不必依赖重定向工作 - 根本没有重定向。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-19
    • 2020-06-28
    • 2018-08-14
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    相关资源
    最近更新 更多