2016-11-09 103 views
0

所以我有一个登陆页面(“/”)。在这个页面上是一个用户名和密码的登录表单,并带有一个提交按钮。我有app.get加载页面和app.post来接收表单的参数。然而,我的意图是有一个app.post('/登录',功能(REQ,RES){/ /逻辑});有没有/登录路线或页面加载,这只会容纳登录本身的逻辑(验证用户名等)是否有一种简单的方法来从'/'的帖子重定向到/登录没有它试图加载/登录页面,这不存在?使用的是重定向后张贴快递JS路线

+0

如果有人告诉我是否存在违反政策的情况,或者由于任何原因我的问题不可接受,而不仅仅是简单地向下投票,那将会很好。 –

+0

我的答案是否适合你?如果是这样,那么你可以考虑[接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235),以便其他人寻找这个问题会看到你的问题有一个被接受的答案。 – rsp

回答

2

我不知道我是否正确地理解你的问题。据我所知,你希望你的POST请求/重定向到POST请求/login这可能会很棘手。

通常你通过发送301永久搬迁或302找到HTTP状态代码执行重定向。他们两人通常在实践中工作,就好像它是303见其他并发出GET请求。参见List of HTTP status codes维基百科:

这是一个与标准相矛盾的行业实践的例子。 HTTP/1.0规范(RFC 1945)要求客户端执行 临时重定向(原始描述短语为“Moved Temporarily”),但流行的浏览器使用303 See Other的 功能实现了302。因此,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 
}); 

这种方式,而不是重定向相同的处理程序将用于这两个路线。它会更快,更稳健,因为这样你就不需要依赖重定向工作,因为根本就没有重定向。