我有以下代码,它应该使用对象键值调用api,然后打开一个文本文件,并用API数据替换与键匹配的文本。为简化起见,我删除了API,只需遍历它们的obj键,然后尝试替换。
const fs = require('fs')
const storage = require('./db/storage')
const keys = Object.keys(storage.MOVIES);
for (const key of keys) {
fs.readFile('./db/movies_prebuilt.txt', 'utf8', function (err,data) {
if (err) {
return console.log(err);
}
//THIS LINE DOESNT WORK using key. but does work using an actual
string.
var result = data.replace(key, "NOTWORKING");
fs.writeFile('./movies.md', result, 'utf8', function (err) {
if (err) return console.log(err);
});
});
}
db/storage代码片段如下所示:
exports.MOVIES = {
"Matrix_Score": "tt0133093",
"2001_Space_Score": "tt0062622"
...
}
里面的替换文本看起来像这样
### Matrix_Score
我已经将for循环更改为data.replace("Matrix_Score","WORKING");
,这非常好用。不能将密钥用作字符串吗?我想要使用它的唯一原因是,当我已经拥有它的时候,我不需要写另一个具有所有名称的数组或对象。
干杯!
发布于 2019-03-01 08:40:51
我认为下面的代码可能更接近我所理解的意图。fs.readFile
返回所有文件内容,您可能希望替换所有键,而不仅仅是最后一个键。也不需要多次读取文件:
const fs = require('fs')
const storage = require('./db/storage')
const keys = Object.keys(storage.MOVIES);
fs.readFile('./db/movies_prebuilt.txt', 'utf8', function (err,data) {
if (err) {
return console.log(err);
}
for (const key of keys) {
data = data.toString().replace(key, "NOTWORKING");
}
fs.writeFile('./movies.md', data, 'utf8', function (err) {
if (err) return console.log(err);
});
});
编辑以添加回原始点
fs.readFile
通常返回一个缓冲区,该缓冲区需要被.toString
'd才能被操作。
https://stackoverflow.com/questions/54936307
复制相似问题