我只是在NodeJS上尝试一些代码,我是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-------");
});
});
我已经编辑了代码并添加了同步,但现在它给了我以下错误:
D:\ NodeJS \ fs>节点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>
我的代码中有关于utf8的错误!
答案 0 :(得分:1)
您正在调用fs object的异步版本并传递回调。
同步版本也存在。例如,请参阅:Check synchronously if file/directory exists in Node.js
在编辑同步前的原始代码中:
fs.writeFile(filename, serverData, function(error) {
...
});
fs.readFile(filename, "utf-8", function(error, data) {
该调用的第二个参数是回调。它将异步运行exists检查并在完成后调用您传入的函数。在writeFile完成之前,将立即调用fs.readfile。
如果你的目标是编写节点异步代码,那么将read调用嵌套在write回调中。如果您的目标是编写一个简单的同步脚本,那么切换到同步调用并编写平面代码。
如果您正在使用node.js编写服务器代码,那么使用所有异步I / O调用至关重要,因为它是循环中的一个线程。如果您只是编写上述脚本并希望它以同步顺序简单,请使用API的同步版本。
由于节点应该是异步的,因此同步调用是例外,因此惯例是使用sync结束函数名称。因此像fs.existsSync
这样的函数