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

ewm0tg9j  于 2023-05-28  发布在  Node.js
关注(0)|答案(1)|浏览(130)

我正在使用连接中间件,并具有如下所示的多个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('');没有帮助。

zujrkrfu

zujrkrfu1#

这里的问题是,这些实际上可能是不同的请求触发了您的中间件。
为了检查此: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或任何其他路由解决方案?

相关问题