node异步进阶系列文章:
node异步进阶(1)-- 回调函数经典写法
node异步进阶(2)-- Promise的连续then写法
node异步进阶(3)-- async写法
假设有一个简单需求,一个http服务器,只能访问首页,服务器返回一个模板,内容有一个json文件提供。
第一版
所有代码如下:
// 这是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模板文件
引用
<html>
<body>
<ul>
%
</ul>
</body>
</html>
执行node app.js,浏览器打开 输入网址 localhost 返回结果如下:
标题1
标题2
标题3
第二版
这里的代码都是正确的,当然了,都是教科书上的,肯定正确。
但是回调有三层。下面通过创建函数,来减少嵌套。也是教科书式的修改(因为就是抄书上的代码)哦。
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.');
}
现在,代码看起来
清楚多了,不象面条了。
分享到:
相关推荐
《axios实战进阶练习——基于 Vue3 + Node.js + ElementPlus 实现的联系人列表管理后台》配套后端 Nodejs 资源,如有需要可以下载运行,结合文章内容,实现文章项目。
node-v6.11.1-win-x64 亲测可用 node-v6.11.1-win-x64 亲测可用 node-v6.11.1-win-x64 亲测可用 node-v6.11.1-win-x64 亲测可用
node-v4.4.4-x86.msi
报错缺少\github\eirslett\node\9.11.1\node-9.11.1-win-x64.zip 因为前端dubbo-admin-ui使用nodeJs,打包时maven需要下载一个node-9.11.1-win-x64.zip的安装包
Node.js(node-v16.15.1-linux-x64.tar.xz)长期版本,适用于Linux x64位系统。Node.js 是一个用于可扩展服务器端和网络应用程序的软件平台。Node.js 应用程序是用 JavaScript 编写的,可以在 Mac OS X、Windows 和 ...
node-v10.1.0-x64.msi 版本的 可下载 安装包 64位的 支付WIN10
node-v6.9.2-x64.msi
node-v8.11.3-x64,安装包 。
node_v8.11.2-x64。前端开发的利器,8.11版本,64位。请看清下载。
node-v0.12.2-x64.msi 安装文件,方便查找使用。
NodeMCU-PyFlasher-3.0-x64
Linux系统node-v10.16.0-linux-x64安装包 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境 Node.js 的包管理器 npm,是全球最大的开源库生态系统。
NodeMCU-PyFlasher-4.0-x64.zip 64位windows!可以擦除再写入,,,,,更新到4.0版本,WIN7 显示缺少DLL 各种补丁很难装齐全,最好目前版本WIN10下运行。
node-v10.15.3-win-x64.zip,node.js windows64位系统安装文件,编译版,版本为v10.15.3。
node-v8.17.0-x64.msi node-v8.17.0-x64.msi
前端开源库-node-red-node-serialport节点红色节点串行端口,节点红色节点与串行端口通信
node-x64-v8.10.0.msi,nodejs的安装包,支持windows+64位环境,版本为8.10.0
node.js开发安装包,node-v4.1.1-x64.msi和node-v4.1.1-x86.msi,64位和32位的
node-v8.9.4-linux-x64.tar.gz node-v8.9.4-linux-x64.tar.gz node-v8.9.4-linux-x64.tar.gz
node-v9.5.0-x64安装包.