当前位置: 首页 > 后端技术 > Node.js

Nodejs搭建本地http服务器

时间:2023-04-03 11:32:15 Node.js

初学NODEJS,从网站上下载了一个单文件的node.exe,简单的JS测试还可以,但是需要用到一些库,完全不可用不知道怎么办与npm。我下载了最新版本并安装了msi版本。安装几分钟后,自动回滚。最后我在虚拟机里安装,然后复制出来。我花了很长时间,这并不容易。然后找了2个例子,都成功实现了。一种是自己写代码,要处理很多问题。比如我的网页是GB2312,NODE.js是UTF-8。折腾了半天,安装了3个库:安装编码转换--npminstalliconvnpminstalliconv-litenpminstallbufferhelper结果可以运行了,中文路径的问题也解决了,但是图片的问题还没有解决了,变成了文字阅读。后来别人说可以下载其他库,然后又找了个例子。这是一个无用的库,但是代码比较全面,修改后可以使用。但是花了几个小时改来改去,一切都不会从头学起。中文路径名,部分文件编码为ANSI。结果,指定的htm是'utf-8',所以无法显示。我修改了完美版本。基本上粘贴后就可以直接使用了。需要添加一些目录的默认文件,比如打开一个新目录www.abc.com/aa/bbb/一般应该会显示index.htm,如果没有就会显示错误页面或者文本,这个功能有没有添加,原作者连“.htm”后缀格式都没有添加,直接显示为文本htm代码。【"htm":"text/html",】这一行是我加的varPORT=3000;varhttp=require('http');varurl=require('url');varfs=require('fs');varmine=require('./mine').types;varpath=require('path');varRequestUrl='';varRootPath='www';//网站根目录varserver=http.createServer(function(request,response){RequestUrl=request.url;//默认页面if(RequestUrl==''||RequestUrl=='/'){RequestUrl='/index.htm';}else{RequestUrl=decodeURIComponent(RequestUrl);}console.log('请求网址:'+RequestUrl);varrealfile=RootPath+RequestUrl;console.log(realfile);varext=path.extname(realfile);ext=ext?ext.slice(1):'unknown';console.log("请请求类型:exr="+ext);fs.exists(realfile,function(exists){if(!exists){response.writeHead(404,{'Content-Type':'text/plain'});response.write("ThisrequestURL"+realfile+"wasnotfoundonthisserver.");response.end();}else{fs.readFile(realfile,"二进制”,函数(错误,文件){if(err){response.writeHead(500,{'Content-Type':'text/plain'});响应结束(错误);}else{varcontentType=mine[ext]||“文本/纯文本”;response.writeHead(200,{'Content-Type':contentType});response.write(file,"binary");响应结束();}});}});});server.listen(PORT);console.log("服务器运行端口:"+PORT+".");代码比较长,大约有1517个字符。格式化之后,感觉还是很漂亮的。还有一个编辑工具叫SUBLIME20M,可以支持编辑几十种语言或者格式,很强大'//www.cnblogs.com/shawn-...nodejs搭建本地http服务器因为不做php-相关的东西,懒得装apache了,干脆用nodejs搭建本地服务器测试一下。Nodejs就是这么个东西,它是前端介入后端的利器。而且目前nodejs的商业价值越来越高。Nodejs其实很底层。从功能上来说,它既是Apache又是PHP。搭建http服务器等功能本来是apache封装的,但是nodejs需要我们手动搭建。其实在实际应用中,我们可以使用现成的框架。但是这里,我想手动搭建一下,也加深一下对http服务器的理解。我们的节点执行以下文件,我将其命名为http.js,它将创建一个httpServer并侦听端口3000。varPORT=3000;varhttp=require('http');varurl=require('url');varfs=require('fs');varmine=require('./mine').types;varpath=require('path');varserver=http.createServer(function(request,response){varpathname=url.parse(request.url).pathname;varrealPath=path.join("assets",pathname);//console.log(realPath);varext=path.extname(realPath);ext=ext?ext.slice(1):'unknown';fs.exists(realPath,function(exists){if(!exists){response.writeHead(404,{'Content-Type':'text/plain'});response.write("ThisrequestURL"+pathname+"wasnotfoundonthisserver.");response.end();}else{fs.readFile(realPath,"binary",function(err,file){if(err){response.writeHead(500,{'Content-Type':'text/plain'});响应。结束(错误);}else{varcontentType=mine[ext]||“文本/纯文本”;response.writeHead(200,{'Content-Type':contentType});response.write(file,"binary");响应.end();}});}});});server.listen(PORT);console.log("服务器运行端口:"+PORT+".");上面我们还介绍了一个我自己写的mine.js,里面存放的是名值对,用于定义不同后缀的文件对应的返回方法:exports.types={"css":"text/css","gif":"image/gif","html":"text/html","htm":"text/html","ico":"image/x-icon","jpeg":"图片/jpeg","jpg":"图片/jpeg","js":"文本/javascript","json":"应用程序/json","pdf":"应用程序/pdf","png":"image/png","svg":"image/svg+xml","swf":"application/x-shockwave-flash","tiff":"image/tiff","txt":"text/plain","wav":"音频/x-wav","wma":"音频/x-ms-wma","wmv":"视频/x-ms-wmv","xml":"文本/xml"};使用fs模块对于读取文件,提供读取文件的方法。事实上,如果你仔细研究文档,你会发现它有两种读取方式:同步和异步。fs.exists这个方法在网上很多文章都写成path.exists,现在推荐写成fs.exists方法。否则会报警:需要注意的是,不仅浏览器访问html文件会形成一个访问,其中链接的js、css等外部文件也会分别形成一个http访问。所以http.createServer的回调实际上在一次页面访问中执行了多次。我们通过console.log(realPath)可以看到:

猜你喜欢