2013-05-10 11 views
6

Sto provando solo un codice su NodeJS, sono nuovo su NodeJS. Ho scritto il seguente blocco di codice.Errore di codifica 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-------"); 
    }); 
}); 

Ho modificato il codice e la sincronizzazione aggiunto, ma ora la sua dandomi seguente errore:

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> 

qualcosa che non va nel mio codice per quanto riguarda utf8!

risposta

7

readFileSync non effettua una richiamata. Suppongo che tu voglia usare readFile invece.

Hai lo stesso problema per writeFileSync. Quelle richiamate richiamate al completamento non hanno senso quando si usano le funzioni IO in modo sincrono. È meglio usare le funzioni asincrone (senza "Sync"), prestare attenzione al fatto che accettano argomenti diversi.

E la documentazione menziona sempre "utf8", non "utf-8", non so se quest'ultimo è supportato.

+0

Ancora più importante, writeFileSync non ci vuole un callback. Tuttavia, richiede una codifica. – Brandon

+0

Sì, 'utf-8' sembra essere supportato: https://github.com/joyent/node/blob/5a5a98d0d8281f6901b7e9dac285d59ab3e39b95/lib/buffer.js#L126 – dule

3

Secondo la documentazione delle API node.js, writeFileSync prende 3 argomenti:

  1. Nome file di scrivere a
  2. dati da mettere in file di
  3. opzioni oggetto che contiene opzionali, uno dei quali è la codifica.

In nessun punto viene specificato un callback. Solo la versione asincrona richiede una richiamata.

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

Prova a modificare del blocco writeFileSync:

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-------");