使用Nodejs搭建Web服务器

2021-07-09 00:05

阅读:479

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 in files){

                        var filename = files[i];

                        html += "

+filename+"‘>"+filename+"
";

                    }

                }catch (e){

                    html += "

您访问的目录不存在

"

                }

                response.writeHead(200, {"content-type""text/html"});

                response.end(html);

            }

        }

    });

}

上一篇:跨站图片上传

下一篇:AAencode


评论


亲,登录后才可以留言!