2014-05-23 20 views
6

Dostaję następujący błąd w moim węzła i nie może zrozumieć, dlaczego:node.js fs.readFileSync() złe argumenty

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 

Jestem całkiem pewien, że to nie ma nic wspólnego z Pakiet async npm używam, ponieważ mam ten sam błąd, zanim zacząłem go używać.

Oto kod:

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

Odpowiedz

12

Jesteś mieszanie synchroniczna i asynchroniczna w zły sposób. Mylicie różne rzeczy.

Kod powinien być tak (synchroniczne):

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

lub asynchroniczne:

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

Różnica wynika, że ​​fs.readFile (docs) oczekuje zwrotna i dadzą Ci błąd/wynik przez wywołanie podanego wywołania zwrotnego. To nic nie zwraca.

I fs.readFileSync (docs) nie przyjmuje wywołania zwrotnego, ponieważ jest synchroniczne i zwraca wynik lub zgłasza błąd.

Również jeśli parsowania .json statycznie, można użyć require:

var json = require('./updates') 

zauważyć, że require funkcja pamięci podręcznej to wyjście i na kolejnych seriach zwróci ten sam obiekt bez blokowania lub wykonywania jakichkolwiek IO .

+0

Dziękuję Farid! Jestem ładnym ojcem, mogę to teraz naprawić. –

+0

Fantastyczne! Nigdy nie złapałem tego o 'readFile' i' readFileSync'. – JDillon522