我正在使用expressjs,我想做这样的事情:
app.post('/bla',function(req,res,next){
//some code
if(cond){
req.forward('staticFile.html');
}
});
答案 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();
}
答案 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)