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

Zha*_* Yi 4 node.js express

我用来express.static提供一些静态文件。我想在返回给客户端之前修改一些文件内容。下面是path下静态资源的源码/public

app.use('/public', express.static(path.join(__dirname, 'public')))
Run Code Online (Sandbox Code Playgroud)

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

我怎样才能做到这一点static?我知道我可以添加自定义中间件,但不知道如何添加。有我可以使用的中间件模式吗?

jfr*_*d00 6

您不用于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')));
Run Code Online (Sandbox Code Playgroud)