我是node / express的新手,所以(希望)有一个明显的答案我不知道。
有一个用于转换静态内容的中间件:https://www.npmjs.com/package/connect-static-transform/。转换函数如下所示:
transform: function (path, text, send) {
send(text.toUpperCase(), {'Content-Type': 'text/plain'});
}
所以,这对于在服务之前转换内容非常有用,但它不会让我看看查询参数。
这个答案显示了如何做到Connect or Express middleware to modify the response.body:
function modify(req, res, next){
res.body = res.body + "modified";
next();
}
但我无法弄清楚如何让它与静态文件内容一起运行。当我运行时res.body
未定义。
express.static
之后是否有办法让中间件运行?
我的用例是我想从磁盘提供文件,根据查询参数的值对某些文本进行小的替换。使用服务器端模板很容易,比如Flask。但我希望用户能够进行简单的npm-install并启动一个小型服务器来执行此操作。由于我是节点和表达的新手,我想省去阅读网址,将文件定位在磁盘上并阅读它的麻烦。但是很明显我浪费了更多的时间来尝试这种方法。
答案 0 :(得分:0)
答案似乎是"没有答案。" (正如Pomax在评论中所建议的那样。)这真的很烦人。我自己并没有花太多时间来弄清楚如何服务和转换文件,但现在我不得不弄清楚错误处理。已有一百万人编写了此代码。
答案 1 :(得分:0)
您可以创建仅对使用 res.write
或 res.end
或其他内容编写的正文块进行转换的中间件。
例如:
const CSRF_RE = /<meta name="csrf-token" content="(.*)"([^>]*)?>/
function transformMiddleware (req, res, next) {
const _write = res.write
res.write = function(chunk, encoding) {
if (chunk.toString().indexOf('<meta name="csrf-token"') === -1) {
_write.call(res, chunk, encoding)
} else {
const newChunk = chunk.toString().replace(CSRF_RE, `<meta name="csrf-token" content="${req.csrfToken()}">`)
_write.call(res, newChunk, encoding)
}
}
next()
}