使用Express JS路由将POST重定向到POST

时间:2016-11-09 19:53:44

标签: node.js express post get

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

1 个答案:

答案 0 :(得分:2)

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

这种方式不是重定向,而是同一个处理程序将用于这两个路由。它会更快更强大,因为你不依赖于重定向工作 - 你根本没有重定向。