如何在文件的特定行添加行';使用node.js和Promises删除内容

如何在文件的特定行添加行';使用node.js和Promises删除内容,node.js,promise,fs,Node.js,Promise,Fs,情景:我编写了一些代码,在主目录及其子目录中循环查找htm文件,一旦找到.htm文件,它应该在head标记后添加一行,然后它应该进一步循环查找主目录中的所有其他.htm文件,并执行相同的操作 守则: var fs=require(“fs”); var路径=要求(“路径”); var mainDirectory='directory'; 函数addlineinfle(){//按顺序执行更改文件内容所需的步骤。 readContent()//可以在下面找到。 。然后(lookForHead)//可

情景:我编写了一些代码,在主目录及其子目录中循环查找htm文件,一旦找到.htm文件,它应该在head标记后添加一行,然后它应该进一步循环查找主目录中的所有其他.htm文件,并执行相同的操作

守则:

var fs=require(“fs”);
var路径=要求(“路径”);
var mainDirectory='directory';
函数addlineinfle(){//按顺序执行更改文件内容所需的步骤。
readContent()//可以在下面找到。
。然后(lookForHead)//可以在下面找到。
。然后(writeNewContent)//可以在下面找到。
}
addlineinfle();
函数readContent(){
返回新承诺((解决、拒绝)=>{
FileContent=[];
fs.readFile(extendedDirectoryPath,(错误,数据)=>{
fileContent=data.toString('utf8').split(“\n”);
log(“读取文件内容”)
});
如果(错误){
拒绝(错误);
}否则{
解析(文件内容);
}
});
}
函数lookForHead(文件内容){
返回新承诺((解决、拒绝)=>{
var string=“”
对于(i=0;i{
log(“已开始写入文件!”)
var file=fs.createWriteStream(extendedDirectoryPath);
on('error',function(err){/*错误处理*/});
FileContent.forEach(函数(v){
write(v.join(“,”)+“\n”);
log(“在文件中写入了一行。”)
});
file.end();
如果(错误){
拒绝(错误);
}否则{
解析(文件内容);
}
});

}
到目前为止,您的工作做得很好,并坚持下去。很高兴看到您也在使用递归。您正在创建一个名为addLineInFile的函数,但没有执行它

修复这一疯狂缩进的第一步不是在一大块代码中完成所有工作,而是创建一些能完成一点点工作的小函数。这将非常有帮助,也使其他人更愿意尝试解决您的问题。感谢@Evert的反馈,我将编辑我的问题。
readline
软件包可用于逐行传输文件(而不是将整个文件读取到内存中)。但这不是您感兴趣的,您希望将所有行收集到一个数组中。因此,使用
fs.readFile
然后将其拆分为一个数组,然后解决您的承诺。承诺也不适用于流式传输多个值。谢谢@Bergi,那么这是否意味着我在文件中的写入方式也必须改变?@Refflected这看起来基本上没问题,尽管有很多小错误。(
fileContent
vs
fileContent
,它不应该是全局变量,而是通过参数传递,
lookForHead
根本不需要承诺,但可以同步
返回其结果,
i
是隐式全局的,
writeNewContent
应该在流结束时解析其承诺不幸的是,我的步骤不是按顺序进行的,不过你有没有办法解决这个问题?我编辑了我的问题如果你想要更多的信息,所有的都应该在那里。