nodejs + express + swig:如何在渲染之前检查请求?

时间:2015-01-17 05:13:14

标签: node.js express swig-template

说实话,我真的不知道nodejs,express和swig是如何工作的。 我有这个代码似乎提供了我所有的HTML页面

app.engine('html', swig.renderFile);
app.set('view engine', 'html');
app.set('views', __dirname+'/html');

我希望能够在返回html文件之前检查请求。具体来说,我想检查用户是否使用旧版本的IE并将其重定向到另一个页面。

现在,我可以检查请求并重定向特定页面,如此

app.get('/veryspecificpage.html', function(req, res) {
  if( isBadBrowser(req) ) {
    res.writeHead(302, {
      'Location': 'browserError.html'
    });
    res.end();
  } else {
    res.render('veryspecificpage', {});
  });
})

但我不想为每个.html页面指定这个。如何截取请求并为所有html页面执行此操作?

2 个答案:

答案 0 :(得分:1)

记录每个请求

示例节点Web服务器。只需将每个请求记录到服务器,就像这样...

var http = require('http');

http.createServer(function (req, res) {

  console.log(req); // <--- LOGS EACH REQUEST 

  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

答案 1 :(得分:1)

您应该使用中间件来检查每个请求。

// gets executed for every request to the app
app.use(function (req, res, next) {
  // check for browser here and redirect if necessary, if not, next() will continue to other middleware/route.
  next();
});

确保在任何路线前放置它。您可以转到this页面了解有关它的更多信息。