javascript - Node.js 脚本似乎跳过了 fs.readFile 代码块

标签 javascript node.js command-line switch-statement

我正在尝试使用 Node.js 通过 fs 附加 .json 文件。

我在文档顶部编写了 const fs = require("fs");,但位于 switchcase 内 block ,其中大部分代码正常运行,整个 fs.readFile(...) 部分似乎没有执行任何操作。

此外,为了简单起见,假设我已将 initCommand 定义为 process.argv[2] 并将 whatToSet 定义为 process.argv[3]

这里是相关 case 的整个 switchcase 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”casenode 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/

相关文章:

java - 检测文件是否准备就绪并提供下载服务

javascript - 在下拉列表的第一行添加自定义文本

node.js - 未找到 MongoDB 数据/数据库

node.js - 防止 NodeJS 中的 MongoDB 多重连接

linux - 在 bash 中交换两个文件的最短方法

windows - 检查特定文件中的更改,批处理未按预期工作

bash - Unix 一行打印输出

javascript - 浏览器中无法正确解析字符串

javascript - bb10 网络 : make a phone call

javascript - 路由导入的服务器端渲染问题