2014-05-23 4 views
6

Ich erhalte die folgenden Fehler in meinem Knoten und kann nicht herausfinden, warum:Node.JS fs.readFileSync() schlechte Argumente

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 

Ich bin ziemlich sicher, es hat nichts mit dem zu tun hat, async npm-Paket verwende ich, da ich denselben Fehler hatte, bevor ich es benutze. Hier

ist der Code:

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

Antwort

12

Sie sind asynchron und synchron in einem schlechten Weg zu mischen. Du verwirrst verschiedene Sachen.

sollte Ihr Code entweder so (synchron):

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

oder asynchron:

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

Der Unterschied kommt, dass fs.readFile (docs) ein Rückruf erwartet und werden Sie den Fehler geben/Ergebnis durch Aufruf des Callbacks gegeben. Es gibt nichts zurück.

Und fs.readFileSync (docs) akzeptiert keinen Rückruf, weil es synchron ist und das Ergebnis zurückgibt oder den Fehler auslöst.

Auch wenn Sie .json statisch parsen, können Sie require verwenden:

var json = require('./updates') 

Beachten Sie, dass, wird require Funktion cachen es ausgegeben und auf den nachfolgenden Läufen wird es das gleiche Objekt zurück, ohne zu blockieren oder zu tun jede IO .

+0

Danke Farid! Ich bin ein hübscher Vater, ich kann es jetzt reparieren. –

+0

Fantastisch! Das habe ich nie über 'readFile' und' readFileSync' verstanden. – JDillon522