背景简介:我已经编写了下面的代码来指示node.js对三个文本文件进行操作,从而组装一个HTML页面,这些文本文件分别是页面头部、页面主体和页面页脚组件。显然,这些页面片段必须按正确的顺序组装。另一方面,在将它们组装之前,完全没有要求从它们的文本文件中按任何顺序提取这些页面片段。我想利用这一点通过实现并行异步性。
实现代码:
问题:node.js服务器在127.0.0.1:8001上没有显示任何内容。我当然期望看到完整的HTML页面。我正在使用q.js的1.00版本,这是此时最新版本的q.js。
后续: 作为对Barry-Johnson全面意见的回应,我已将其代码修改为以下形式:
结果正是我想要的,一个按正确顺序完整组装的HTML页面。我在“join”方法中添加了''作为参数,因为我不想让这些部分用逗号连接。我使用了“done”方法,因为我希望任何未捕获的错误能够浮现出来。我知道,在一般情况下,我们不希望任何生产代码崩溃,Barry-Johnson的“fail”方法实现这一目的很好。
实现代码:
var sys = require('sys'),
http = require('http'),
fs = require('fs'),
Q = require('q'),
fullpage, pageheader, pagebody, pagefooter;
fullpage = '';
fs_readheader = fs.readFile('./htmlfiles.1', 'utf-8', function (err, data) {
if (err) { throw err; }
return pageheader = data;
});
fs_readbody = fs.readFile('./htmlfiles.2', 'utf-8', function (err, data) {
if (err) { throw err; }
return pagebody = data;
});
fs_readfooter = fs.readFile('./htmlfiles.3', 'utf-8', function (err, data) {
if (err) { throw err; }
return pagefooter = data;
});
finish = function(err, data) {
if (err) { throw err; }
console.log(pageheader);
data = pageheader + pagebody + pagefooter;
console.log(data);
return fullpage = data;
}();
Q.all([fs_readheader,fs_readbody,fs_readfooter]).then(finish);
http.createServer(function(request, response) {
response.writeHeader(200, {"Content-Type": "text/html"});
response.write(fullpage);
response.end();
}).listen(8001);
问题:node.js服务器在127.0.0.1:8001上没有显示任何内容。我当然期望看到完整的HTML页面。我正在使用q.js的1.00版本,这是此时最新版本的q.js。
后续: 作为对Barry-Johnson全面意见的回应,我已将其代码修改为以下形式:
var http = require('http'),
fs = require('fs'),
Q = require('q');
var readFileP = Q.denodeify(fs.readFile);
http.createServer(function(request, response) {
Q.all([ readFileP('./htmlfiles.1', 'utf-8'),
readFileP('./htmlfiles.2', 'utf-8'),
readFileP('./htmlfiles.3', 'utf-8') ])
.done(function(content){
response.writeHead(200, {"Content-Type": "text/html"});
response.end(content.join(''));
});
}).listen(8001);
结果正是我想要的,一个按正确顺序完整组装的HTML页面。我在“join”方法中添加了''作为参数,因为我不想让这些部分用逗号连接。我使用了“done”方法,因为我希望任何未捕获的错误能够浮现出来。我知道,在一般情况下,我们不希望任何生产代码崩溃,Barry-Johnson的“fail”方法实现这一目的很好。