Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在移动中向node.js流追加文本_Javascript_Node.js_Stream_Node.js Stream - Fatal编程技术网

Javascript 在移动中向node.js流追加文本

Javascript 在移动中向node.js流追加文本,javascript,node.js,stream,node.js-stream,Javascript,Node.js,Stream,Node.js Stream,我正在使用fs.createReadStream()读取文件,然后通过管道将它们发送到响应 我想在提供HTML文件时添加一个小Javascript函数 我能想到的唯一方法是将文件读入字符串,将文本附加到字符串中,然后将字符串流式传输到响应中,但我认为有更好/更快的方法可以做到这一点 有没有一种方法可以让我在运行时将文本附加到文件中?在@Matthew Bakaitis建议通过使用之后,在阅读了一段时间并检查了github上的问题之后,我发现通过的开发人员推荐 为了一个和我相似的案子 使用fini

我正在使用
fs.createReadStream()
读取文件,然后通过管道将它们发送到响应

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

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


有没有一种方法可以让我在运行时将文本附加到文件中?

在@Matthew Bakaitis建议通过使用
之后,在阅读了一段时间并检查了github上的问题之后,我发现
通过
的开发人员推荐 为了一个和我相似的案子

使用
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);
var through2=require(“through2”);
var jsfn=“function jsfn(){return“这是一个js fn”;}”;
var标志=0;
fileStream.pipe(
through2({“decodeStrings”:false,“encoding”:“utf8”},函数(chunk,enc){
如果(标志===0){
var-tempcunk=chunk;
chunk=jsfn;
chunk+=临时chunk;
flag=1;
}
这个。推(块);
})
).管道(res);
选项
decodeStrings
必须设置为
false
,以便数据块是字符串而不是缓冲区。这与
stream
api的
transform
功能有关,而与through2无关


有关

的更多信息,您可以使用类似的方法来执行此操作。它有一个读写功能,可以让您转换流,而无需在内存中存储大型数组。@MatthewBakaitis感谢您的建议。在阅读了through并在github上查看了它的问题之后,我看到它的开发人员推荐through2用于类似于我的案例。所以,主要感谢你,我现在使用through2,问题解决了:)你是否应该把它变成一个让我接受的答案?我认为这是一个最好的评论。这不是一个详细的代码问题,这通常是最好的详细答案。您可能希望编辑您的问题,在结尾添加一点,表示您通过评论找到了您的问题,任何人都可以通过搜索找到您的问题。。。