【问题标题】:Node.JS fs.readFileSync() bad argumentsNode.JS fs.readFileSync() 错误参数
【发布时间】:2014-07-12 14:35:48
【问题描述】:

我的节点出现以下错误,但不知道原因:

TypeError: Bad arguments
    at Object.fs.readFileSync (fs.js:277:11)
    at getSeries (/Users/user/tv/final.js:57:16)
    at /Users/user/tv/final.js:89:4
    at /Users/user/tv/node_modules/async/lib/async.js:610:21
    at /Users/user/tv/node_modules/async/lib/async.js:249:17
    at iterate (/Users/user/tv/node_modules/async/lib/async.js:149:13)
    at /Users/user/tv/node_modules/async/lib/async.js:160:25
    at /Users/user/tv/node_modules/async/lib/async.js:251:21
    at /Users/user/tv/node_modules/async/lib/async.js:615:34
    at /Users/user/tv/final.js:86:4

我很确定这与我正在使用的 async npm 包无关,因为我在开始使用它之前遇到了同样的错误。

代码如下:

    function getSeries() {
    JSON.parse(fs.readFileSync('updates.json', function(err,data) {
        if (err) {
           console.error(err);
        }
        else {
           var json = data;
        }
}));

【问题讨论】:

    标签: javascript node.js filesystems fs


    【解决方案1】:

    您以一种糟糕的方式混合了异步和同步。你混淆了不同的东西。

    您的代码应该是这样的(同步):

    try {
        var json = JSON.parse(fs.readFileSync('updates.json'));
    } catch (err) {
        console.error(err);
    }
    

    或异步:

    fs.readFile('updates.json', function(err,data) {
        if (err) {
           console.error(err);
        }
        else {
           var json = JSON.parse(data);
        }
    });
    

    不同之处在于fs.readFile (docs) 需要回调,并会通过调用给定的回调为您提供错误/结果。它不返回任何东西。

    而fs.readFileSync (docs) 不接受回调,因为它是同步的,它返回结果或抛出错误。

    另外,如果你是静态解析.json,你可以使用require:

    var json = require('./updates')
    

    请注意,require 函数将缓存它的输出,并在随后的运行中返回相同的对象,而不会阻塞或执行任何 IO。

    【讨论】:

    • 谢谢法里德!陛下,我现在可以修好了。
    • 太棒了!我从来没有听说过readFile 和readFileSync。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 1970-01-01
    • 2015-06-28
    • 2018-12-21
    相关资源
    最近更新 更多