如果请求已被处理,则阻止执行下一个路由器

Prevent executing next router if the request already handled

本文关键字:执行 下一个 路由器 请求 处理 如果      更新时间:2023-09-26

我使用的是连接中间件,有多个router功能,如下面的

var server = connect()
  .use(connect.cookieParser("secret"))
  .use(connect.session({secret: 'keyboard cat',cookie: { maxAge: 60000 }}))
  .use('/somepath', connect.static(__dirname + '/somepath'))
  .use('/_someapi', function (req, res) {
      // do something
  })
  .use(function (req, res) { // default case router
      // do something
  })
  .listen(8080)

我的问题是,即使我请求/_someapi,在执行其函数后,也会调用下一个router。我想知道我该如何预防它?我的意思是,如果请求已经被处理,那么下一个路由器就不应该尝试为其服务

从函数返回falseres.end('');没有帮助。

这里的问题是,这些可能实际上是触发中间件的不同请求。

为了对此进行检查:console.log(req.url)。最烦人的问题是favicon.ico,当你不知道浏览器实际上一直在请求它时,它会让你头疼。

如果您正在开发RESTful API或任何其他不需要favicon.ico的类似应用程序,那么首先使用这个中间件。

app.use(function(req, res, next) {
  if (req.url != '/favicon.ico') {
    return next();
  } else {
    res.status(200);
    res.header('Content-Type', 'image/x-icon');
    res.header('Cache-Control', 'max-age=4294880896');
    res.end();
  }
});

这将响应200和非常长的缓存寿命,这样浏览器就不会再调用它了。

同样,只是为了澄清一下——你确定你需要使用.use而不是.get或任何其他路由解决方案吗?