对于Node.js的新手来说,构建一个静态的资源服务器是一个很好的练习,从最简单的返回文件或错误开始,逐渐增强,逐渐加深对http的理解。我们开始吧。让我们的手里充满了在线请求!
注释:
当然,如果在项目中使用express框架,则可以通过使用一行express.static代码来达到目的:
App.use(express.static('public ')我们这里要实现的只是express背后工作的一部分。静态的。建议同步读取该模块的源代码。
基本功能
不要急于写下第一行代码,而是按照基本功能来梳理步骤。
根据指定的端口在本地启动http服务器,等待来自客户端的请求。当请求到达时,使用设置的静态文件目录作为基础,根据请求的url检查文件是否存在。如果文件不存在,返回404状态码,并向客户端发送未找到页面。如果文件存在,请打开要读取的文件。设置响应头,将文件发送到客户端。6.等待客户端的下一个请求。
实现基本功能
代码结构
创建nodejs-static-webserver目录,并在该目录中运行npm init来初始化package.json文件。
mkdir nodejs-static-web server CD ' $ _ '//initializepackage . jsonnpinit然后创建以下文件目录:
-config-default . JSON-static-server . js-app . jsdefault . JSON { ' port ' : 9527,' root ' : '/Users/Sheila 1227/Public ',index page ' : ' index . html ' } default . js存储一些默认配置,比如端口号、静态文件目录(root)、默认页面等。当这样的请求http://localhost :9527/my files/到达时,如果根据根映射获得的目录中有index.html,根据我们的默认配置,index.html的内容将被发送回客户端。
静态服务器. js
const http=require(' http ');const path=require(' path ');const config=require('。/config/default’);class static SERVER { constructor(){ this . port=config . port;this . root=config . root;this . index page=config . index page;} start(){ http . createserver((req,RES)={ const pathName=path . join(this . root,path . normalize(req . URL));RES . WriteHead(200);RES . end(` Requeste path : $ { pathName } `);}).侦听(this.port,err={ if(err){ console . error(err);console.info('无法启动服务器');} else { console.info(`服务器在端口${this.port} `)上启动);} });} } module.exports=StaticServer在这个模块文件中,我们声明了一个StaticServer类,并为它定义了一个start方法。在这个方法中,我们创建一个服务器对象,监听rquest事件,并将服务器绑定到配置文件中指定的端口。在这个阶段,我们简单地返回任何请求的请求文件路径,没有区别。路径模块用来规范连接和解析路径,这样我们就不用处理操作系统之间的差异了。
app.js
const StaticServer=require('。/static-server’);(新的StaticServer())。start();
在这个文件中,调用上面的static-server模块,创建一个StaticServer实例,调用它的start方法,并启动一个静态资源服务器。在这个文件之后将不会有其他的修改,对静态资源服务器的所有改进都将在static-se中进行