2013-05-10 34 views
6

Tôi chỉ đang thử một số mã trên NodeJS, tôi mới dùng NodeJS. Tôi đã viết sau khối mã.Đưa ra lỗi mã hóa trong 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-------"); 
    }); 
}); 

Tôi đã chỉnh sửa mã và bổ sung đồng bộ nhưng bây giờ nó đem lại cho tôi lỗi sau:

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> 

Có gì không ổn trong mã của tôi về utf8!

Trả lời

7

readFileSync không gọi lại. Tôi đoán bạn muốn sử dụng readFile để thay thế.

Bạn có cùng sự cố với writeFileSync. Những callbacks gọi khi hoàn thành không có ý nghĩa khi sử dụng chức năng IO đồng bộ. Tốt hơn là sử dụng các hàm không đồng bộ (không có "Đồng bộ"), chú ý đến thực tế chúng lấy các đối số khác nhau.

Và tài liệu luôn đề cập đến "utf8", không phải "utf-8", tôi không biết liệu tài liệu sau có được hỗ trợ hay không.

+0

Quan trọng hơn, writeFileSync không mất một callback. Tuy nhiên, nó có một mã hóa. – Brandon

+0

Yea, 'utf-8' có vẻ được hỗ trợ: https://github.com/joyent/node/blob/5a5a98d0d8281f6901b7e9dac285d59ab3e39b95/lib/buffer.js#L126 – dule

3

Theo tài liệu API Node.js, writeFileSync mất 3 đối số:

  1. Filename để viết thư cho
  2. dữ liệu để đưa vào tập tin
  3. Tùy chọn đối tượng chứa tùy chọn, một trong số đó được mã hóa.

Không có nơi nào chỉ định gọi lại. Chỉ phiên bản async mới gọi lại.

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

Hãy thử điều này thay vì khối writeFileSync của bạn:

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-------"); 
Các vấn đề liên quan