如何使用express.static修改静态文件内容?

4

我正在使用express.static来服务一些静态文件。我想在将文件返回给客户端之前修改一些文件内容。下面是/public路径下静态资源的源代码。

app.use('/public', express.static(path.join(__dirname, 'public')))

在公共目录下有一些html文件,我想在响应客户端之前修改这些html文件。如何使用static完成此操作?我知道可以添加自定义中间件,但不确定如何操作。是否有我可以使用的中间件模式?
1个回答

7
您不应该使用express.static()来修改文件,因为这不是它的作用。
相反,您需要创建特定URL的路由,然后从磁盘读取文件,进行修改并将其发送回客户端。Express生态系统中有许多模板系统(例如EJS、Jade、Handlebars等),专门设计解决此问题。或者,如果您真的想自己编写代码,可以自己加载文件,进行所需的修改,然后发送它。
app.get("/public/somefile", function(req, res) {
    fs.readFile(path.join(__dirname, 'public', 'somefile'), function(err, data) {
        if (err) {
            res.sendStatus(404);
        } else {
            // modify the data here, then send it
            res.send(data);
        }
    });
});

// put express.static after your other routes that serve from the public
// directory so those other routes are matched first
app.use('/public', express.static(path.join(__dirname, 'public')));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接