我正在使用fs.createReadStream()读取文件,然后将它们通过管道传递给响应。

在提供HTML文件时,我想添加一个小的Javascript函数。

我能想到的唯一方法是将文件读入字符串,将文本附加到字符串,然后将字符串流式传输到响应,但是我认为可能会有更好/更快的方法。

有没有办法让我随时随地将文本添加到文件中?

最佳答案

在@Matthew Bakaitis建议使用through之后,阅读了一段时间并检查了github上的问题后,我发现through的开发人员推荐了through2
对于类似于我的情况。

使用finish回调实现更好的实现

let str_to_append="Whatever you want to append"

let through_opts = { "decodeStrings": false, "encoding": "utf8" }

let chunk_handler = function (chunk, enc, next) {
    next(null, chunk)
}

let finish_handler = function (done) {
    this.push(str_to_append)
    done()
}

let through_stream = through2.ctor(through_opts, chunk_handler, finish_handler)


旧实施

这就是我实施解决方案的方式:

var through2 = require("through2");

var jsfn="<script>function JSfn(){ return "this is a js fn";}</script>";

var flag=0;

fileStream.pipe(
    through2( {"decodeStrings" : false, "encoding": "utf8"},function(chunk, enc) {
        if(flag===0) {
            var tempChunk=chunk;
            chunk=jsfn;
            chunk+=tempChunk;
            flag=1;
        }
        this.push(chunk);
    })
).pipe(res);


必须将选项decodeStrings设置为false,以便数据块是字符串而不是缓冲区。这与transform api的stream功能有关,而不与through2有关。

有关transform的更多信息

关于javascript - 随时随地将文本追加到node.js流,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27426081/

10-09 16:19