readfile.js
function readFileCallBack(err,data) {
if (err) {
console.error(err);
}else{
console.log(data);
}
}
var fs=require('fs');
fs.readFile('input.txt','utf-8',readFileCallBack);
console.log('end.');
//回调函数
var fs1=require('fs');
var data1=fs1.readFileSync('app.txt');
console.log(data1);
console.log('end2.');
//同步式读取
input.txt
No,Luke.I am your father.
app.txt
var http=require('http');
http.createServer(function(req,res){
res.writeHead(200,{'Content-Type':'text/html'});
res.write('<h1>Node.js</h1>');
res.end('<p>Hello Supervisor</p>');
}).listen(3000);
console.log("HTTP server is listening at port 3000");
我把异步式读取文件和同步式读取文件放在一起,让它们分别读input.txt和app.txt的内容,结果输出:
end.
<Buffer 76 61 72 20 68 74 74 70 3d 72 65 71 75 69 72 65 28 27 68 74 74 70 27 29
3b 0d 0a 0d 0a 68 74 74 70 2e 63 72 65 61 74 65 53 65 72 76 65 72 28 66 75 6e ..
. >
end2.
No,Luke.I am your father.
好似同步式读没有成功。
结果一看,原来是同步式读没有用带有编码参数的函数调用。
加了utf-8参数就好了。
看了API也没找到那个buffer怎么来的。
明天继续学,找答案。
Here is the answer(from《Node.js开发指南》):
值得注意的是,Node.js大多数异步函数均无返回值,而同步IO函数需要try,catch来捕捉异常。
当然,不指明编码而直接输出console.log(data.toString())也可。