我是nodejs的新手。我一直在尝试编写一个简单的Web服务器并呈现html页面。我不想在这个阶段使用Express或其他框架,因为我试图深入了解。
我的问题是:在启动服务器后第一次加载页面时,它会加载默认的响应值。在每次备用加载之后,它显示默认页面(404 Not Found)和正确的HTML。
这是第一次加载时的服务器登录(当显示'default'作为响应时):
刷新时,服务器日志完全相同,但会显示实际页面。
进一步刷新后,我得到404 Not Found,这是我的路由器的默认情况。 服务器日志再次相同。
这是server.js代码:
var http = require('http');
var url = require('url');
function start(route){
function onRequest(request, response){
var pathname = url.parse(request.url).pathname;
console.log('request for url '+pathname+' received');
resp = route(pathname);
console.log('content-type '+resp['ctype']);
response.writeHead(200, {'Content-Type':resp['ctype']});
response.write(resp['file'].toString());
response.end();
}
http.createServer(onRequest).listen(8888);
console.log('Server Has Started');
};
exports.start = start;
这是路由器代码:
var fs = require('fs'),
datafile={'file':'default', 'ctype':'text/html'};
function read_html(filename){
fs.readFile(filename, 'utf-8', function(err, data){
if (err){console.log(err);}
else {datafile['file'] = data;console.log('FILE READING FINISHED ...\n');}
});
}
function route(pathname){
console.log('About to route for request '+ pathname);
switch(pathname){
case '/':
console.log('this is the home page');
read_html('./index.html');
datafile['ctype']='text/html';
break;
case '/features':
console.log('this is the FEATURES page');
read_html('./features.html');
datafile['ctype']='text/html';
break;
case '/css/root.css':
console.log('this is the CSS');
read_html('./css/root.css');
datafile['ctype']='text/css';
break;
default:
datafile['file'] = '404 Not Found\n';
datafile['ctype']='text/html';
console.log('404 NOT FOUND');
break;
}
return datafile;
}
未优化代码的Aplogies。
答案 0 :(得分:1)
我不知道这是否是你问题的核心,但这是错误的。我对你的代码做了一些评论,希望这会有所帮助:
function read_html(filename){
// STEP 1
fs.readFile(filename, 'utf-8', function(err, data) {
// STEP 10, you can absolutly not say what
// happens since you called read_html
if (err){
console.log(err);
}
else {
datafile['file'] = data;
console.log('FILE READING FINISHED ...\n');
}
});
// STEP 2, we'll exit the function
}
尝试阅读有关异步概念以及如何在node.js中处理数据的更多信息。