我正在使用连接中间件并具有多个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('');
无效。
答案 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
或任何其他路由解决方案吗?