1

老实说,我真的不知道 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 页面执行此操作?

4

2 回答 2

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();
});

确保将其放置在任何路线之前。您可以通过访问页面了解更多信息。

于 2015-01-17T21:00:56.120 回答
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/');
于 2015-01-17T20:32:48.160 回答