我正在使用 expressjs,我想做这样的事情:
app.post('/bla',function(req,res,next){
//some code
if(cond){
req.forward('staticFile.html');
}
});
正如 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
这种方法适合您的需要吗?
app.post('/bla',function(req,res,next){
//some code
if(cond){
res.redirect('/staticFile.html');
}
});
当然,您需要使用 express/connectstatic
中间件来获得此示例工作:
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);
});
}
});
Sine express 已弃用 res。sendfile你应该使用 res. 而是发送文件。
请注意,sendFile需要一个相对于当前文件位置的路径(而不是像sendfile那样的项目路径)。要使其具有与sendfile相同的行为- 只需将 root 选项设置为指向应用程序根目录:
var path = require('path');
res.sendfile('./static/index.html', { root: path.dirname(require.main.filename) });
在这里找到有关的解释path.dirname(require.main.filename)
基于@bryanmac 的回答:
app.use("/my-rewrite", (req, res, next) => {
const indexFile = path.join(__dirname, "index.html");
// Check if file exists
fs.stat(indexFile, (err, stats) => {
if (err) {
// File does not exist or is not accessible.
// Proceed with other middlewares. If no other
// middleware exists, expressjs will return 404.
next();
return;
}
// Send file
res.sendFile(indexFile);
});
});
由于在 Node.js v16.9.1path.exists
中path.existsSync
不再存在,fs.stat
因此使用。