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传递,控制应该被处理到一个特定的路由,我会在其中写入ROUTEif else
语句(不像next()
,它将控制发送到下一个匹配的路由)
例如:
app.get('*', function(req, res, next) {
if(x==y){
//call SPECIFIC route 3
} else {
// call SPECIFIC route 4 (another route)
//ROUTE 1
});
我试着用重定向来做,但它不起作用
多谢各位
编辑:
- 路由将是:
存在。我将使用express session检查用户的用户名是否存在于会话中/checkIfSession
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发出此请求的,但首先您的问题得到了回答吗??