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

时间:2018-07-01 03:35:33

标签: node.js express

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

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

公共目录下有一些html文件,我想在响应客户端之前修改html文件。

如何使用static来做到这一点?我知道我可以添加定制的中间件,但不确定如何添加。我可以使用一种中间件模式吗?

1 个答案:

答案 0 :(得分:1)

对于要修改的文件,请不要使用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')));