我正在尝试使用 Node.js 通过 fs
附加 .json
文件。
我在文档顶部编写了 const fs = require("fs");
,但位于 switch
和 case
内 block ,其中大部分代码正常运行,整个 fs.readFile(...)
部分似乎没有执行任何操作。
此外,为了简单起见,假设我已将 initCommand
定义为 process.argv[2]
并将 whatToSet
定义为 process.argv[3]
这里是相关 case
的整个 switch
和 case
block :
switch(initCommand) {
case("set"):
newObject = {
whatToSet: whatToSet,
whenToSet: Date.now(),
};
console.log(newObject);
console.log("top of fs code block");
fs.readFile('objects.json', function (err, data) {
let json = [];
if (!err) {
try {
json = JSON.parse(data);
} catch (e) {
console.error(e);
}
}
json.push(newObject);
fs.writeFile("objects.json", JSON.stringify(json), function(err){
if (err) throw err;
console.log(`Your "object" was successfully appended!`);
});
});
console.log("bottom of fs code block");
break;
}
当我从命令行运行命令时,调用“set”case
,node index.js set attribute
这里是输出:
{ whatToSet: 'attribute', whenToSet: 1516730036191 }
top of fs code block
bottom of fs code block
不用说,objects.json
保持不变。任何想法将不胜感激。
编辑:发现一个恶意的process.exit();
正在取消异步fs
进程。代码现在可以正确运行。我还根据大家的建议更新了上面的 fs.readFile(...)...
位。
最佳答案
确保文件 objects.json
存在,它包含有效的 JSON,并且该 JSON 表示一个数组(如 []
)。如果文件包含对象 ({}
),则对 .push
的调用将会失败。
如果您不关心在发生错误时丢失某些数据的可能性,您可以尝试如下操作:
newObject = {
whatToSet: whatToSet,
whenToSet: Date.now(),
};
console.log(newObject);
console.log("top of fs code block");
fs.readFile('objects.json', function (err, data) {
let json = [];
if (!err) {
try {
json = JSON.parse(data);
} catch (e) {
console.error(e);
}
}
json.push(newObject);
fs.writeFile("objects.json", JSON.stringify(json), function(err){
if (err) throw err;
console.log(`Your "object" was successfully appended!`);
});
});
console.log("bottom of fs code block");
我在 Node v8.4.0 上测试了这段代码,它运行得很好。
关于javascript - Node.js 脚本似乎跳过了 fs.readFile 代码块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48408267/