NodeJ中重定向和下一个有什么区别?

时间:2017-06-21 11:26:11

标签: javascript node.js express

我完全不明白这两者之间的区别:

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存在。我会使用快速会话来检查会话中是否存在用户的用户名。

如果存在,我想将控件发送到if,否则else

假设请求是:

  1. http://198.168.43.200:3000/checkIfSession

  2. http://198.168.43.200:3000/some

  3. (我只会打电话给第一个请求)。

    编辑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

1 个答案:

答案 0 :(得分:2)

我想如果您希望您的路由首先通过某种身份验证,则可以在路由中使用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的东西。

<强>情况2

x!==y现在用户为not authenticated or logged in且用户仍在尝试访问您网站的/some部分。在这种情况下,用户将被重定向到您为您的网站设计的任何页面的login页面,以便他/她重新输入他/她的凭据。

此处,redirect功能会重定向用户,而不会发送任何数据。与break类似的东西。