簡體   English   中英

NodeJ中的redirect和next之間有什么區別?

[英]What is the difference between redirect and next in NodeJs?

我完全不了解這兩者之間的區別:

app.get('*', function(req, res, next) {
  next();
 //ROUTE 1
});

app.get('*', function(req, res) {
  res.redirect('/some');
  //ROUTE 2
});

app.get('/some', function(req, res) {
  res.send("success");
  //ROUTE 3
});

當我嘗試向ROUTE 1發出請求時,我獲得了響應成功,ROUTE 2沒有顯示此響應。 這是為什么?

我想做的是:

每個請求都應該從ROUTE 1傳遞出去,並且應該將控制處理到SPECIFIC路由,我將在其中寫入ROUTE if-else語句(與next() ,后者將控制發送到下一個MATCHING路由)。

例如:

app.get('*', function(req, res, next) {
  if(x==y){
    //call SPECIFIC route 3 
  } else {
    // call SPECIFIC route 4 (another route)
    //ROUTE 1
});

我試圖通過重定向來做到這一點,但是它不起作用。

謝謝。

編輯:

  • 路由為: /checkIfSession存在。 我將使用express-session來檢查會話中用戶的用戶名是否存在。

如果存在,我想送控制if另有else

假設請求是:

  1. http://198.168.43.200:3000/checkIfSession

  2. http://198.168.43.200:3000/some

(我只會調用第一個請求)。

編輯2:我嘗試了以下操作,但是當我請求時卻沒有得到任何回應:

app.use(function (req, res, next) {
    if(2==2){
        res.redirect("/session");
    } else {
        res.end("else");
   }
});

app.get("/session", function(req, res){
    res.write("session");
    res.end();
});

app.get("/some", function(req, res){
    res.write("some");
    res.end();
});

要求: / some

我想如果您想讓路由首先通過某種身份驗證,則可以在路由中使用middleware

下面是示例代碼:

app.get('/some', checkSession, function(req, res) {
  res.send("success");
});

// this is the middleware function

function checkSession(req, res, next) {
    // do your checking here
    if (x===y) {
        next();
        //continue users access to protected API
    } 
    else {
        res.redirect('/');
        // redirect user to the default login page
    }
} 

在以上示例中,有2 Cases

情況1

x === y從給定的示例開始,我假設用戶已登錄,因此,當用戶訪問網站的/some部分時,他將從服務器接收Success

這是您next()函數的使用,即它繼續執行該api或發送數據,無論用戶請求什么。 類似的內容可以continue進行編程。

情況二

x!==y現在是這種情況,即用戶not authenticated or logged in並且用戶仍在嘗試訪問網站的/some部分。 在這種情況下,用戶將被重定向到您為網站設計的任何login頁面,以便他/她重新輸入其憑據。

在這里,您的redirect功能將重定向用戶而不發送任何數據。 類似的break

暫無
暫無

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

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