手机版

Nodejs构建简单Web服务器的详细说明和示例

时间:2021-09-11 来源:互联网 编辑:宝哥软件园 浏览:

使用Nodejs构建一个简单的Web服务器

用Nodejs设置Web服务器是学习node.js的综合入门教程,要完成一个简单的Web服务器,需要学习Nodejs中的几个重要模块,如http协议模块、文件系统、url解析模块、路径解析模块、301重定向问题。让我们简单谈谈如何设置一个简单的Web服务器。

作为一个网络服务器,它应该具备以下功能:

1.它可以显示以结尾的网页。html/。html文件的后缀

2.可以直接打开以。js/。css/。json/。文本

3.显示图像资源

4.自动下载以结尾的文件。apk/。docx/。活力

5.如果看起来像http://xxx.com/a/b/,找出B目录中是否有index.html,如果有,显示它;如果没有,请列出该目录中的所有文件和文件夹,以便进一步访问。

6.如果它看起来像http://xxx.com/a/b,它将被301重定向到http://xxx.com/a/b/,这可以解决内部资源引用错位的问题。

介绍几个需要使用的模块:

//http协议模块var http=require(' http ');//url解析模块var URL=require(' URL ');//文件系统模块var fs=require(' fs ');//路径解析模块var path=require(' path ');创建服务并在指定的端口监视器中创建它:

//创建一个服务var http server=http . create server(this . process request . bind(this));//在指定的端口监听服务http server.listen (port,function(){ console . log('[http server][start]','运行于http://' IP' : '端口'/');console . timeend('[HttpServer][Start]');});创建服务时,需要传递一个匿名函数processRequest来处理请求。processRequest接收两个参数,即请求和响应。request对象包含请求的所有内容,response用于设置响应头并响应客户端。

processRequest:function(请求,响应){ var hasExt=truevar requestUrl=request.urlvar pathName=URL . parse(RequestURl)。路径名;//解码请求的路径,防止中文乱码pathName=decodeURI(pathName);//如果没有扩展名If(路径。路径{//中的extname (pathname)===' ')如果没有以/结尾,则添加/并进行301重定向if (pathname。charat(路径名。长度-1)!='/'){ pathName='/';var redirect=' http://' request . headers . host pathName;response.writeHead(301,{ location : redirect });response . end();}//添加默认访问页,但该页不一定存在,稍后会处理pathName=' index.htmlhasExt=false//标记默认页面由程序自动添加}//获取资源文件var的相对路径文件path=path.join ('http/webroot ',pathname);//获取文档类型var contenttype=this。对应文件的getcontenttype(文件路径);//如果文件名存在fs.exists(文件路径,函数(exists){ if(exists){ response . write head(200,{ ' content-type ' : content type });var stream=fs . createreadstream(file path,{ flags: ' r ',encoding : null });stream.on('error ',function(){ response . write head(500,{ ' content-type ' : ' text/html ' });response.end('h1500服务器错误/h1 ');});//返回文件内容stream.pipe(响应);}else {//如果文件名不存在(hasext){//如果这个文件不是程序自动添加的,则直接返回404响应。writehead (404,{ ' content-type ' : ' text/html ' });response.end('h1404未找到/h1 ');}else {//如果文件是程序自动添加的,不存在,则表示用户想访问目录var HTML=' head metacarset=' utf-8 '/head '下的文件列表;请尝试{ //用户访问目录varfiledir=file path . substring(0,file path . last indexoff(' \ \ '));//获取用户访问路径var files=fs . readdir sync(filedir)下的文件列表;//逐一列出访问路径下的所有文件,并添加超链接,以便用户进一步访问(文件中的var I){ var filename=files[I];html=' diva href=' filename ' ' ' filename '/a/div ';} }catch (e){ html='h1您访问的目录不存在/h1'}响应。writehead (200,{ ' content-type ' : ' text/html ' });response . end(html);} } });},请求处理功能中有几个要点需要提及:

如果路径中有中文,浏览器会自动编码(英文不会变,中文会变),所以收到地址后,需要对地址进行解码,否则最终得到的路径与真实路径不匹配。

当访问路径不以特定文件结尾,不以/结尾时,需要通过重定向添加/来指示当前目录,否则将找不到当前路径下的静态资源

如果访问路径是目录,则会列出目录中的所有文件和文件夹,并且可以通过单击来访问。为了使中文目录正常显示,应该在表头设置charset=utf-8

核心代码这么多,大概140行,完整代码已经上传到http://xiaozai.jb51.net/201611/yuanma/node-master(jb51.net)了。rar。

要运行演示,请打开cmd切换到根目录并运行节点start。

如果你有任何问题,请讨论!

感谢您的阅读,希望对大家有所帮助,感谢您对本网站的支持!

版权声明:Nodejs构建简单Web服务器的详细说明和示例是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。