【问题标题】:Ignoring words in an express route忽略快速路线中的单词
【发布时间】:2014-05-02 08:28:54
【问题描述】:

我有以下路线:

app.get('/blah/query.json', doSomething);
app.get('/blah/:id.:format', doSomethingElse);

目前两条路线都在继续,因此调用路线一 (query.json),然后调用路线二 (:id.:format)。如果调用路由一,我如何排除对路由二的调用。我试过这样的事情:

app.get('/blah^\/(?!query)(:id.:format)$', doSomethingElse);

但是这个,以及这个的几个变体,似乎都不起作用。我发现一个帖子引用了快递代码here。即使查看此代码并尝试不同的方法,我仍然无法让“If not query”表达式正常工作。

有什么想法吗?

【问题讨论】:

  • 你在doSomething里面打电话给next吗?
  • 是的,这两种方法都没有向请求者返回响应,而是他们做事并调用下一个
  • 他们为什么不回复?看来您真的在与 Express 的预期用途作斗争。调用 next 明确表示要执行下一个处理程序,这就是您要避免的。在我看来,真正应该在路由回调中调用next 的唯一时间是传递一个错误。如果您发布有关您的路线的更多信息,很高兴尝试提出替代方案。
  • 问题出在我正在创建的框架中。我已经简化了在堆栈上发布的问题。我了解常见用法,但是由于在路由中使用正则表达式将是一个理想的解决方案,因此很高兴知道您是否可以将正则表达式与快速请求参数结合使用。

标签: regex node.js express routes


【解决方案1】:

如果您设置如下信号量会怎样?

var sempahore_execute_second = true;

app.get('/blah/query.json', function(req,res,next){
    sempahore_execute_second = false;
});

app.get('/blah/:id.:format', function(req,res,next){
    if (sempahore_execute_second) {
        // Execute code here.
    };
}));

// or better:
app.get('/blah/:id.:format', function(req,res,next){
    if (sempahore_execute_second) return next();

    // Execute code here.
}));

我知道这有点混乱,您应该期待其他解决方案,但目前这可能对您有所帮助。

【讨论】:

  • 感谢您的回复。我目前正在使用类似的东西,在 express 中使用 res.locals 将请求标记为“已处理”作为热修复。但是在这个问题中,我试图找到一种方法来避免使用正则表达式一起执行第二条路线。
猜你喜欢
  • 2020-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 2020-01-30
  • 1970-01-01
相关资源
最近更新 更多