node异步进阶系列文章:
[url=http://xieye.iteye.com/blog/2400542]node异步进阶(1)-- 回调函数经典写法[/url]
[url=http://xieye.iteye.com/blog/2400567]node异步进阶(2)-- Promise的连续then写法[/url]
[url=http://xieye.iteye.com/blog/2400571]node异步进阶(3)-- async写法[/url]
继续上回的任务,这次使用全宇宙最新最[b]炫酷[/b]的写法 async ,await
[b][size=x-large]第五版(串行)[/size][/b]
可以看出,相比前面4个版本,这个版本的代码最清爽,大赞node。
特别需要提醒注意的是:
这种写法要求node的版本较新,我的是node8.9,windows系统是我爱用的。
同样,本任务更适合并发请求文件,所以下面给出并发的版本
[b][size=x-large]第六版(并发)[/size][/b]
[url=http://xieye.iteye.com/blog/2400542]node异步进阶(1)-- 回调函数经典写法[/url]
[url=http://xieye.iteye.com/blog/2400567]node异步进阶(2)-- Promise的连续then写法[/url]
[url=http://xieye.iteye.com/blog/2400571]node异步进阶(3)-- async写法[/url]
继续上回的任务,这次使用全宇宙最新最[b]炫酷[/b]的写法 async ,await
[b][size=x-large]第五版(串行)[/size][/b]
var http = require('http');
var fs = require('fs');
http.createServer(function(req,res){
if (req.url=='/') {
getTitles(res);
}
}).listen(80,function(){
console.log('server start..');
});
async function getTitles(res){
try{
var titles = await get_file_content('/tpl/title.json').then(JSON.parse);
var tmpl = await get_file_content('/tpl/template.html');
formatHtml(titles,tmpl, res);
} catch(err) {
hadError(err, res); // 调用处理错误的函数。
};
}
// 这是通用函数,异步读文件
function get_file_content(file)
{
return new Promise(function (resolve, reject) {
fs.readFile(__dirname+file, function(err,data){
if (err) {
reject(err);
} else {
resolve(data.toString() );
}
});
});
}
//这是本程序主要逻辑,模板替换后,输出
function formatHtml(titles,tmpl, res) {
var html = tmpl.replace('%', ' <li > ' +titles.join('</li > <li >') +' </li > ' );
res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
res.end(html);
}
// 通用的错误处理函数
function hadError(err, res) {
console.log(err);
res.end('server error.');
}
可以看出,相比前面4个版本,这个版本的代码最清爽,大赞node。
特别需要提醒注意的是:
这种写法要求node的版本较新,我的是node8.9,windows系统是我爱用的。
同样,本任务更适合并发请求文件,所以下面给出并发的版本
[b][size=x-large]第六版(并发)[/size][/b]
var http = require('http');
var fs = require('fs');
http.createServer(function(req,res){
if (req.url=='/') {
getTitles(res);
}
}).listen(80,function(){
console.log('server start..');
});
async function getTitles(res){
try{
let [titles, tmpl] = await Promise.all([
get_file_content('/tpl/title.json').then(JSON.parse),
get_file_content('/tpl/template.html')
]);
formatHtml(titles,tmpl, res);
} catch(err) {
hadError(err, res); // 调用处理错误的函数。
};
}
// 这是通用函数,异步读文件
function get_file_content(file)
{
return new Promise(function (resolve, reject) {
fs.readFile(__dirname+file, function(err,data){
if (err) {
reject(err);
} else {
resolve(data.toString() );
}
});
});
}
//这是本程序主要逻辑,模板替换后,输出
function formatHtml(titles,tmpl, res) {
var html = tmpl.replace('%', ' <li > ' +titles.join('</li > <li >') +' </li > ' );
res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
res.end(html);
}
// 通用的错误处理函数
function hadError(err, res) {
console.log(err);
res.end('server error.');
}