我在我的节点中收到以下错误,无法找出原因:
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;
}
}));
答案 0 :(得分:12)
您正在以错误的方式混合异步和同步。你混淆了不同的东西。
您的代码应该是这样的(同步):
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。