1

我正在使用连接中间件并具有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('');并没有帮助。

4

1 回答 1

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或任何其他路由解决方案吗?

于 2013-08-30T12:31:44.727 回答