我完全不明白这两者之间的区别:
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
。
假设请求是:
(我只会打电话给第一个请求)。
编辑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
答案 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
类似的东西。