javascript – Node.JS fs.readFileSync()坏参数

我在我的节点中收到以下错误,无法弄清楚原因:
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

我很确定它与我使用的异步npm软件包无关,因为我在开始使用之前遇到了同样的错误.

这是代码

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

解决方法

您正在以错误的方式混合异步和同步.你混淆了不同的东西.

你的代码应该像这样(同步):

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

或异步:

fs.readFile('updates.json',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.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...