使用Nodejs搭建Web服务器
2021-07-09 00:05
processRequest:function(request,response){
var
hasExt =
true
;
var
requestUrl = request.url;
var
pathName = url.parse(requestUrl).pathname;
//对请求的路径进行解码,防止中文乱码
pathName = decodeURI(pathName);
//如果路径中没有扩展名
if
(path.extname(pathName) ===
‘‘
){
//如果不是以/结尾的,加/并作301重定向
if
(pathName.charAt(pathName.length-1) !=
"/"
){
pathName +=
"/"
;
var
redirect =
"http://"
+request.headers.host + pathName;
response.writeHead(301, {
location:redirect
});
response.end();
}
//添加默认的访问页面,但这个页面不一定存在,后面会处理
pathName +=
"index.html"
;
hasExt =
false
;
//标记默认页面是程序自动添加的
}
//获取资源文件的相对路径
var
filePath = path.
join
(
"http/webroot"
,pathName);
//获取对应文件的文档类型
var
contentType =
this
.getContentType(filePath);
//如果文件名存在
fs.exists(filePath,function(exists){
if
(exists){
response.writeHead(200, {
"content-type"
:contentType});
var
stream = fs.createReadStream(filePath,{flags:
"r"
,encoding:
null
});
stream.
on
(
"error"
, function() {
response.writeHead(500,{
"content-type"
:
"text/html"
});
response.end(
"
500 Server Error
");
});
//返回文件内容
stream.pipe(response);
}
else
{
//文件名不存在的情况
if
(hasExt){
//如果这个文件不是程序自动添加的,直接返回404
response.writeHead(404, {
"content-type"
:
"text/html"
});
response.end(
"
404 Not Found
");
}
else
{
//如果文件是程序自动添加的且不存在,则表示用户希望访问的是该目录下的文件列表
var
html =
""
;
try
{
//用户访问目录
var
filedir = filePath.substring(0,filePath.lastIndexOf(
‘\\‘
));
//获取用户访问路径下的文件列表
var
files = fs.readdirSync(filedir);
//将访问路径下的所以文件一一列举出来,并添加超链接,以便用户进一步访问
for
(
var
i
in
files){
var
filename = files[i];
html +=
""
;
}
}
catch
(e){
html +=
"
您访问的目录不存在
"
}
response.writeHead(200, {
"content-type"
:
"text/html"
});
response.end(html);
}
}
});
}