NodeJs中读取文件的方式有同步和异步两种,先测试同步读取文件内容;在models文件夹中保存read_file.js,代码如下:
var fs = require('fs');
var read = {
//同步读取文件方法
read_file_sync:function (file_path) {
var data = fs.readFileSync(file_path, 'utf-8');
console.log(data);
console.log('同步方法执行完毕');
},
//异步读取文件方法
read_file:function (file_path) {
fs.readFile(file_path, function (err, data) {
if (err) {
console.log(err);
} else {
console.log(data.toString());
console.log('异步方法执行完毕');
}
})
}
}
module.exports = read;
保存d4_read_file.js,代码如下:
var http = require('http');
var out_file = require('./models/read_file');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-type':'text/html;charset=utf-8'});
if (req.url !== '/favicon.ico') {
//执行同步读取文件
out_file.read_file_sync('./views/login.html');
res.end('ok');
console.log('主程序加载完毕');
}
}).listen(3000);
其中在views文件夹中保存login.html,内容如下:
Title
用户登录
cmd 运行node d4_read_file.js
控制台输出:
主程序加载完毕
再测试一下异步读取文件,只要在d4_read_file.js中加上异步读取文件的方法即可,代码如下:
var http = require('http');
var out_file = require('./models/read_file');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-type':'text/html;charset=utf-8'});
if (req.url !== '/favicon.ico') {
//执行同步读取文件
out_file.read_file_sync('./views/login.html');
//执行异步读取文件
out_file.read_file('./views/login.html');
res.end('ok');
console.log('主程序加载完毕');
}
}).listen(3000);
cmd 运行node d4_read_file.js
控制台输出:
主程序加载完毕
从同步和异步这两种执行的顺充可以看出两者本质的区别
现在需要将读取的文件显示在浏览器中,只需要在d4_read_file.js添加一个自定义回调函数,代码如下:
res.writeHead(200, {'Content-type':'text/html;charset=utf-8'});
if (req.url !== '/favicon.ico') {
//自定义一个回调函数,用于
function call(data) {
res.write(data);
res.end();
}
........
models文件夹中read_file.js文件中的异步方法,也要作些修改调整,代码如下:
var fs = require('fs');
var read = {
//同步读取文件方法
read_file_sync:function (file_path) {
var data = fs.readFileSync(file_path, 'utf-8');
console.log(data);
console.log('同步方法执行完毕');
},
//异步读取文件方法
read_file:function (file_path, func) {
fs.readFile(file_path, function (err, data) {
if (err) {
console.log(err);
} else {
func(data.toString());//传入回调函数
console.log(data.toString());
console.log('异步方法执行完毕');
}
})
}
}
module.exports = read;
稍作修改d4_read_file.js文件中的内容:
//执行异步读取文件
out_file.read_file('./views/login.html', call);
cmd运行node d4_read_file.js
浏览器中输出: