2013-05-10 13 views
6

Ich bin nur einen Code auf NodeJS versuchen, ich bin neu in NodeJS. Ich habe folgenden Codeblock geschrieben.Giving Codierungsfehler in NodeJS

var fs = require('fs'), 
    os = require('os'); 

var filename = 'Server.ini'; 
var serverData = os.hostname() + "\n" + os.platform() + "\n" + os.type() + "\n"; 

fs.existsSync(filename, function(exists) { 
    if(exists) { 
     console.log("1. " + filename + " file found. Server needs to be updated.") 

     fs.unlinkSync(filename, function(error) { 
      if(error) throw error; 
      console.log("2. " + filename + " is been unlinked from server."); 
     }); 

    } else { 
     console.log("1. " + filename + " not found."); 
     console.log("2. Server needs to be configured."); 
    } 
}); 

fs.openSync(filename, "w+", function(error) { 
    if(error) throw error; 
    console.log("3. " + filename + " file is been locked."); 
}); 

fs.writeFileSync(filename, serverData, function(error) { 
    if(error) throw error; 
    console.log("4. " + filename + " is now updated."); 

    fs.readFileSync(filename, 'utf-8', function(error, data) { 
     if(error) throw error; 

     console.log("5. Reading " + filename + " file"); 
     console.log("6. " + filename + " contents are below\n"); 
     console.log(data); 
     console.log("-------THE END OF FILE-------"); 
    }); 
}); 

Ich habe den Code bearbeitet und Sync hinzugefügt, aber jetzt mir seine Fehler gibt folgende:

D:\NodeJS\fs>node eg5.js 

buffer.js:382 
     throw new Error('Unknown encoding'); 
      ^
Error: Unknown encoding 
    at Buffer.write (buffer.js:382:13) 
    at new Buffer (buffer.js:261:26) 
    at Object.fs.writeFileSync (fs.js:758:12) 
    at Object.<anonymous> (D:\NodeJS\fs\eg5.js:28:4) 
    at Module._compile (module.js:449:26) 
    at Object.Module._extensions..js (module.js:467:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Module.runMain (module.js:492:10) 
    at process.startup.processNextTick.process._tickCallback (node.js:244:9) 

D:\NodeJS\fs> 

Gibt es etwas falsch in meinem Code in Bezug auf UTF-8!

Antwort

7

readFileSync muss kein Rückruf. Ich nehme an, Sie wollten stattdessen readFile verwenden.

Sie haben das gleiche Problem für writeFileSync. Die Rückrufe, die nach der Beendigung aufgerufen werden, machen keinen Sinn, wenn IO-Funktionen synchron verwendet werden. Es ist besser, die asynchronen Funktionen (ohne "Sync") zu verwenden, achten Sie darauf, dass sie unterschiedliche Argumente haben.

Und die Dokumentation erwähnt immer "utf8", nicht "utf-8", ich weiß nicht, ob letzteres unterstützt wird.

+0

Noch wichtiger ist, writeFileSync nehmen keinen Rückruf. Es erfordert jedoch eine Codierung. – Brandon

+0

Ja, 'utf-8' schaut unterstützt werden: https://github.com/joyent/node/blob/5a5a98d0d8281f6901b7e9dac285d59ab3e39b95/lib/buffer.js#L126 – dule

3

Nach der node.js API-Dokumentation nimmt writeFileSync 3 Argumente:

  1. Datei
  2. Daten schreiben in der Datei
  3. Optional Objekt mit Put-Optionen, eine davon ist codiert.

Nirgends es einen Rückruf angeben. Nur die asynchrone Version nimmt einen Rückruf entgegen.

http://www.nodejs.org/api/fs.html#fs_fs_writefilesync_filename_data_options

Versuchen Sie stattdessen Ihre writeFileSync Block:

fs.writeFileSync(filename, serverData, { encoding: 'utf8'}); 
console.log("4. " + filename + " is now updated."); 

var contents = fs.readFileSync(filename, 'utf8'); 
console.log("5. Reading " + filename + " file"); 
console.log("6. " + filename + " contents are below\n"); 
console.log(contents); 
console.log("-------THE END OF FILE-------"); 
Verwandte Themen