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

时间:2013-06-27 13:12:20

标签: javascript node.js connect

我正在使用连接中间件并具有多个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也会被调用。我想知道我该如何预防呢?我的意思是如果请求已经处理,那么下一个路由器不应该尝试提供它。

从函数中返回false并且res.end('');无效。

1 个答案:

答案 0 :(得分:0)

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

为了检查这一点: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或任何其他路由解决方案吗?