Nodejs Web基础开发实例(三)
循序渐进地通过几个实例展示如何通过Nodejs实现Web数据库应用的开发:
实例三:改进的静态页面Web服务器
实例二无法正确响应浏览器对图片文件等的请求,本实例将进行改进。思路是导入path模块,利用其extname方法判断用户请求的文件类型,根据不同文件设置http响应头中不同的内容类型。不同文件类型对应的http内容类型请查阅http相关文档或教程中关于conten-type的内容。
var http = require('http');
var fs = require('fs');
var url = require('url');
var path = require('path');
// 创建服务器
http.createServer(function(request, response) {
// 解析请求,包括文件名
var pathname = url.parse(request.url).pathname;
if (pathname == "/")
pathname = "/index.html";
// 输出请求的文件名
console.log("Request for " + pathname + " received.");
//提取文件后缀,判断文件类型
var extname = path.extname(pathname);
console.log("type is " + extname);
// 从文件系统中读取请求的文件内容
fs.readFile(pathname.substr(1), function(err, data) {
if (err) {
console.log(err);
// HTTP 状态码: 404 : NOT FOUND
// Content Type: text/html
response.writeHead(404, {
'Content-Type': 'text/html'
});
} else {
// HTTP 状态码: 200 : OK
if (extname == ".jpg") {
response.writeHead(200, {
'Content-Type': 'image/jpeg'
});
//response.write(data);
} else if(extname == ".png"){
response.writeHead(200, {
'Content-Type': 'image/png'
});
//response.write(data);
} else if(extname == ".gif"){
response.writeHead(200, {
'Content-Type': 'image/gif'
});
//response.write(data);
} else if(extname == ".css"){
response.writeHead(200, {
'Content-Type': 'text/css'
});
//response.write(data);
} else if(extname == ".js"){
response.writeHead(200, {
'Content-Type': 'application/javascript'
});
//response.write(data);
} else if(extname == ".html"||extname == ".htm"){
response.writeHead(200, {
'Content-Type': 'text/html'
});
//response.write(data);
} else {
response.writeHead(200, {
'Content-Type': 'text/plain'
});
//response.write(data);
}
// 响应文件内容
response.write(data);
}
// 发送响应数据
response.end();
});
}).listen(8000);
// 控制台会输出以下信息
console.log('Server running at http://127.0.0.1:8000/');