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