在express.js中渲染一些视图和404个其他视图

时间:2016-02-12 14:55:02

标签: node.js express

这是我的路由设置:

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

怎么可以这样做?

3 个答案:

答案 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

Error handling

中记录

答案 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');
      } 
  });

将文件名保留在数组中并立即调用。