这是我的路由设置:
app.get('*', getJSON);
app.get('/', [list, render]);
app.get('/questions', [list, render]);
app.get('/ask', [ask, render]);
app.get('/:questionId(\\d+)', [question, render]);
app.get('/:questionId(\\d+)/:slug', [question, render]);
app.get('/sitemap.xml', clone);
app.get('/feed/qa.rss', clone);
app.post('/rest/1/:object/:method', [post, render]);
app.all('*', function(req, res){
res.send(404).status('Page not found');
});
如您所见,几乎所有路径都以运行渲染功能结束。我想应用与我在getJSON开头使用的相同模式,但最后。这样做的简单方法是添加
app.all('*', render);
最后,但我不能,因为我希望跳过sitemap.xml和qa.rss,以及此处未指定的所有路径,例如/foo
。
怎么可以这样做?
答案 0 :(得分:0)
使用
https://www.npmjs.com/package/finalhandler
作为最后一条路线。我不使用快递,而是快递路由器
https://www.npmjs.com/package/router
那里的例子显示了它使用最终处理程序
答案 1 :(得分:0)
创建中间件。有人这样:
<强> /middlewares/error.js 强>
$(window).on('popstate', function () {
// the user has navigated back,
// load the content again (either via ajax or from an cache-object)
// execute your custom stuff here...
executeGlobJs()
})
或者:
hashchange
中记录
答案 2 :(得分:0)
您可以为sitemap.xml或其他文件制作路由器:
app.get('/sitemap.xml', function(req, res) {
app.use( function (err, xml) {
if (err) {
res.status(400);
res.render('404.jade');
}
});
将文件名保留在数组中并立即调用。