2016-11-09 60 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 
}); 

這種方式,而不是重定向相同的處理程序將用於這兩個路線。它會更快,更穩健,因爲這樣你就不需要依賴重定向工作,因爲根本就沒有重定向。