【发布时间】:2017-11-24 06:44:22
【问题描述】:
我很不明白这两者的区别:
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 发出请求时,我得到响应success,但ROUTE 2 没有显示此响应。这是为什么呢?
我想做的是:
每个请求都应该从 ROUTE 1 传递,并且控制应该被处理到一个 SPECIFIC 路由,我会在其中写 ROUTE if-else 语句(不像 @ 987654327@,将控制权发送到下一个 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。
假设请求是:
(我只会调用第一个请求)。
编辑 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
【问题讨论】:
-
你用什么确切 uri来试试这个?
-
什么是 x 和 y 在您的示例中是服务器端的某个变量还是您从客户端获得的东西?我希望你的所有路线都经过一个特定的条件,你可以使用
middleware -
res.redirect将满足您的要求。不需要下一个。但是,如果您提到 * ,任何请求都将进入此路由,而不管您对该路由的定义如何,因此在您的情况下您可能会陷入无限重定向。例如:如果您在 * 之后定义了 /test,那么对 /test 的请求将被发送给 *。 -
请检查编辑。
-
看你的编辑我同意@warl0ck 你想实现某种形式的
middleware。
标签: javascript node.js express