Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NodeJs中重定向和下一步的区别是什么?_Javascript_Node.js_Express - Fatal编程技术网

Javascript NodeJs中重定向和下一步的区别是什么?

Javascript NodeJs中重定向和下一步的区别是什么?,javascript,node.js,express,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 }); 当我尝试向路线1发出请求时,我

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

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
});
当我尝试向
路线1
发出请求时,我得到了成功的响应,但是
路线2
没有显示此响应。为什么呢

我想做的是:

每个请求都应该从路由1传递,控制应该被处理到一个特定的路由,我会在其中写入ROUTE
if else
语句(不像
next()
,它将控制发送到下一个匹配的路由)

例如:

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

假设请求是:

  • (我只会按第一个要求打电话)

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

    我想如果您想让路由首先通过某种身份验证,您可以在路由中使用
    中间件

    下面是示例代码:

    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
        }
    } 
    
    在上述示例中,有两种情况

    案例1

    x===y
    根据给定示例,我假设用户已登录,因此当用户访问网站的
    /some
    部分时,他将从服务器收到
    成功

    这是对
    next()
    函数的使用,即它继续执行该api或发送用户请求的任何数据。类似于编程中的
    继续

    案例2

    x==y
    现在,如果用户未通过身份验证或登录,并且用户仍在尝试访问网站的
    /some
    部分,则会出现这种情况。在这种情况下,用户将被重定向到您为网站设计的任何内容的
    登录
    页面,以便他/她重新输入其凭据


    此处,您的
    重定向
    函数重定向用户,而不发送任何数据。类似于中断的东西,我想如果您希望您的路由首先通过某种身份验证,您可以在路由中使用
    中间件

    下面是示例代码:

    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
        }
    } 
    
    在上述示例中,有两种情况

    案例1

    x===y
    根据给定示例,我假设用户已登录,因此当用户访问网站的
    /some
    部分时,他将从服务器收到
    成功

    这是对
    next()
    函数的使用,即它继续执行该api或发送用户请求的任何数据。类似于编程中的
    继续

    案例2

    x==y
    现在,如果用户未通过身份验证或登录,并且用户仍在尝试访问网站的
    /some
    部分,则会出现这种情况。在这种情况下,用户将被重定向到您为网站设计的任何内容的
    登录
    页面,以便他/她重新输入其凭据


    此处,您的
    重定向
    函数重定向用户,而不发送任何数据。类似于
    break

    的东西,您使用什么确切的URI来尝试此操作?在您的示例中,x和y是服务器端的某个变量还是从客户端获得的某个变量?我希望您的所有路线都经过一个特定的条件,您可以使用
    中间件
    res.redirect
    满足您的要求。不需要下一个。但是如果您提到*,任何请求都将进入该路由,而不管您对该路由的定义如何,因此在您的情况下,您可能会以无限重定向结束。如果你在*之后定义/测试,请求/测试将提交给*。请检查编辑。查看您的编辑,我同意@warl0ck您想要实现某种形式的
    中间件
    。您使用什么样的URI来尝试此操作?在您的示例中,x和y是什么?服务器端的某个变量还是从客户端获得的某个变量?我希望您的所有路线都经过一个特定的条件,您可以使用
    中间件
    res.redirect
    满足您的要求。不需要下一个。但是如果您提到*,任何请求都将进入该路由,而不管您对该路由的定义如何,因此在您的情况下,您可能会以无限重定向结束。例如:如果您在*之后定义了/test,那么将向*发出请求/test。请检查编辑。查看您的编辑,我同意@warl0ck,您希望实现某种形式的
    中间件
    。这最后建议我应该使用res.redirect“调用”特定路由?这是我的基本查询。see here next()将继续用户对api的访问,而redirect将用户发送到该页面。我将更新答案以使其更清晰。现在我遇到了一个错误:XMLHttpRequest无法加载。飞行前的响应无效(重定向)我是从angularjs的ajaxsure发出此请求的,但首先您的问题得到了回答吗?这最后建议我应该使用res.redirect来“调用”特定路线?这是我的基本查询。see here next()将继续用户对api的访问,而redirect将用户发送到该页面。我将更新答案以使其更清晰。现在我遇到了一个错误:XMLHttpRequest无法加载。飞行前的响应无效(重定向)我是从angularjs的ajaxsure发出此请求的,但首先您的问题得到了回答吗??