expressjs:如何在处理程序中间重定向到静态文件?

时间:2013-02-09 11:32:04

标签: node.js redirect express

我正在使用expressjs,我想做这样的事情:

app.post('/bla',function(req,res,next){
   //some code
   if(cond){
      req.forward('staticFile.html');
   }
});

3 个答案:

答案 0 :(得分:7)

正如Vadim指出的那样,您可以使用res.redirect向客户端发送重定向。

如果要在不返回客户端的情况下返回静态文件(如建议的注释),则只需在使用__dirname构造后调用sendfile即可。您可以将下面的代码分解为单独的服务器重定向方法。您也可能想要注销路径以确保它符合您的期望。

    filePath = __dirname + '/public/' + /* path to file here */;

    if (path.existsSync(filePath))
    {
        res.sendfile(filePath);
    }
    else
    {
       res.statusCode = 404;
       res.write('404 sorry not found');
       res.end();
    }

以下是供参考的文档:http://expressjs.com/api.html#res.sendfile

答案 1 :(得分:1)

这种方法适合您的需求吗?

app.post('/bla',function(req,res,next){
   //some code
   if(cond){
      res.redirect('/staticFile.html');
   }
});

当然,您需要使用express / connect static中间件来实现此示例:

app.use(express.static(__dirname + '/path_to_static_root'));

<强>更新

您也可以简单地将文件内容流式传输到响应中:

var fs = require('fs');
app.post('/bla',function(req,res,next){
   //some code
   if(cond){
      var fileStream = fs.createReadStream('path_to_dir/staticFile.html');
      fileStream.on('open', function () {
          fileStream.pipe(res);
      });
   }
});

答案 2 :(得分:0)

Sine express已弃用res。 sendfile 您应该使用res。 sendFile

请注意 sendFile 需要相对于当前文件位置的路径(而不是像 sendfile 那样的项目路径)。为了给它提供与 sendfile 相同的行为 - 只需设置指向应用程序根目录的root选项:

var path = require('path');
res.sendfile('./static/index.html', { root: path.dirname(require.main.filename) });

查找here有关path.dirname(require.main.filename)

的说明