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){
var titles;
get_file_content('/tpl/title.json') // 先抓取数据文件
.then(JSON.parse) // 这里顺便做一下解析,让我们尽情滥用node的异步吧!!
.then( function(value){
titles = value; // 把局域变量保存到上一层变量。
return '/tpl/template.html';//给下一个文件请求then传参
}).then(
get_file_content // 再抓取模板文件
).then(function (tmpl){ // tmpl是上一个promis的输出
formatHtml(titles,tmpl, res); // 调用函数全部搞定
}
).catch( function (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.');
}
原文https://www.iteye.com/blog/xieye-2400567
网友评论