簡體   English   中英

試圖了解html GET和res.redirect如何在express中工作

[英]trying to understand how html GET and res.redirect works in express

我是nodejs express等人的新手。我試圖了解為什么res.redirect需要GET才能工作。而res.render卻不需要。 這是場景。 到目前為止,我有一個使用護照進行身份驗證的登錄名。 身份驗證后,取決於用戶的類型...。用戶將被發送到特定的html頁面。 如果我只是重新渲染頁面,它就可以正常工作....但是,如果我重新重定向到頁面,則會收到“無法獲取...”錯誤,表明我沒有get('/ page')塊。 這是一個示例代碼:

// get part request page
  router.get('/partpage', function(req,res) {
  res.render('partpage', {name: user.get("Name"),email:user.get("Email")});

});
// get dealer page
  router.get('/dealers', function(req,res) {
  res.render('dealers', {name: user.get("Name"),email:user.get("Email")});

});

.
.
.
router.post('/login',
 passport.authenticate( 'local',
    {sucessRedirect:'/',
     failureRedirect:'/users/login',
     failureFlash:true}),
 function(req,res)
 {
.
.
.

// After passport authentication.....

 if (user.get("Category")==="dealer")
     {
       res.redirect('/users/dealers?name='+username+'&email='+useremail);
     }
  else
     {
      res.redirect('/users/partpage?name='+username+'&email='+useremail);
     }

如果刪除任何一個GET,我都會收到並報錯(“無法獲取...”)。 我不明白為什么會這樣。 更重要的是,我正在將參數傳遞給頁面...哪一個優先? ...顯然這里有問題! 誰能為我解釋一下? 正確的方法是什么?

主頁路由設置如下:

在app.js中

.
.
.
var routes = require('./routes/index');
.
.
.
app.set('views', path.join(__dirname,'views'));
app.set('view options', { layout:'layout.ejs' });
app.set('view engine','ejs');
.
.
.
app.use('/', routes);

res.redirect就像Web服務器接受requrest之后的東西一樣,它在表后面迫使瀏覽器更改url,這意味着302 http代碼。 當res.render是Web服務器時,僅使用jade或ejs來渲染頁面,這意味着200個http代碼。

對於您而言,在用戶訪問/login?Category=dealer ,他/她的瀏覽器將是/users/dealers?name=a&email=b 302。 然后,您的服務器需要路由器router.get('/dealers', fn)來顯示頁面。 最重要的是,用戶的瀏覽器網址將是/users/dealers?name=a&email=b

如果您直接在身份驗證回調中使用res.render ,則用戶的瀏覽器將顯示渲染的頁面,但url仍然是/login?Category=dealer

建議在您的情況下使用重定向。 否則,如果用戶按“ F5”刷新頁面,則他/她實際上是刷新URL /login?Category=dealer ,這將不必要地觸發您的身份驗證路由器和邏輯。


更新:

渲染和重定向的區別,(抱歉,我回復晚,由於長城,這些天我無法訪問stackoverflow)

1個

用戶的瀏覽器向您的服務器發出http請求===>

您的服務器獲取請求,並使用res.render輸出響應,這意味着您的服務器在響應標頭中返回“ http status 200”,在響應正文中返回“ html” ==>

用戶的瀏覽器收到“ 200 and html”響應,然后解析“ html”進行查看。

2

用戶的瀏覽器向您的服務器發出http請求===>

您的服務器獲取請求,並使用res.redirect,這意味着您的服務器在響應標頭中返回了“ http狀態302和新url”,但未返回任何響應。==>

用戶的瀏覽器收到“ 302和新的url”響應,然后重新定位到新的url,這意味着用戶的瀏覽器再次使用此新的url ius http請求==>

您的服務器獲取請求,並使用res.render輸出響應,這意味着您的服務器在響應標頭中返回“ http status 200”,在響應正文中返回“ html” ==>

用戶的瀏覽器收到“ 200 and html”響應,然后解析“ html”進行查看。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM