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]
假设有一个简单需求,一个http服务器,只能访问首页,服务器返回一个模板,内容有一个json文件提供。
[b][size=x-large]第一版[/size][/b]
所有代码如下:
tpl目录下两个文件
这是 title.json文件,提供数据
这是template.html模板文件
[quote]
<html>
<body>
<ul>
%
</ul>
</body>
</html>
[/quote]
执行node app.js,浏览器打开 输入网址 localhost 返回结果如下:
[b][size=x-large]第二版[/size][/b]
这里的代码都是正确的,当然了,都是教科书上的,肯定正确。
但是回调有三层。下面通过创建函数,来减少嵌套。也是教科书式的修改(因为就是抄书上的代码)哦。
现在,代码看起来[b]清楚[/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]
假设有一个简单需求,一个http服务器,只能访问首页,服务器返回一个模板,内容有一个json文件提供。
[b][size=x-large]第一版[/size][/b]
所有代码如下:
// 这是app.js
var http = require('http');
var fs = require('fs');
http.createServer(function(req,res){
if (req.url=='/') {
fs.readFile(__dirname+'/tpl/title.json', function(err,data){
if (err) {
console.error(err);
res.end('server error.');
} else {
var titles = JSON.parse(data.toString());
fs.readFile(__dirname+'/tpl/template.html', function(err,data){
if (err) {
console.error(err);
res.end('server error.');
} else {
var tmpl = data.toString();
var html = tmpl.replace('%', ' <li > ' +titles.join('</li > <li >') +' </li > ' );
res.writeHead(200,{'Content-Type':'text/html;charset=utf-8'});
res.end(html);
}
})
}
});
}
}).listen(80,function(){
console.log('server start..');
});
tpl目录下两个文件
这是 title.json文件,提供数据
[
"标题1",
"标题2",
"标题3"
]
这是template.html模板文件
[quote]
<html>
<body>
<ul>
%
</ul>
</body>
</html>
[/quote]
执行node app.js,浏览器打开 输入网址 localhost 返回结果如下:
标题1
标题2
标题3
[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..');
});
function getTitles(res){
fs.readFile(__dirname+'/tpl/title.json', function(err,data){
if (err) {
hadError(err, res);
} else {
getTemplate(JSON.parse(data.toString()) , res);
}
});
}
function getTemplate(titles, res){
fs.readFile(__dirname+'/tpl/template.html', function(err,data){
if (err) {
hadError(err, res);
} else {
formatHtml(titles,data.toString(), res);
}
});
}
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.');
}
现在,代码看起来[b]清楚[/b]多了,不象面条了。