如何用nodejs的http模块创建一个简单的静态资源服务器

介绍

本篇内容主要讲解”如何用nodejs的http模块创建一个简单的静态资源服务器”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习”如何用nodejs的http模块创建一个简单的静态资源服务器”吧!

nodejs自问世以来,基于nodejs的网络开发框架层出不穷,TJ大神的表达和高雅,阿里的鸡蛋,360大神李成银的thinkjs等等,这些框架是学不完的。

这些框架都是基于nodejs核心模块http模块封装而来的,只不过按照业务的不同,个人代码风的不同,产生了不同的框架,今天就带大家一起用nodejs的http模块封装一个简单的http静态服务器。

在开始写代码之前,我们首先要了解http的模型,http的模型是基于请求=反?废煊φ庋囊桓龉獭?/p>

nodejs将客户端向服务端发送请求的过程抽象成了一个事件,我们先用代码演示一下:

如何用nodejs的http模块创建一个简单的静态资源服务器

此时用节点命令运行这个文件,就可以返回hello world,服务器启动了。

但是这个服务器,对任何请求都是返回hello world,功能太简单了,我们结合nodejs的另外一个核心模块个,fs模块,将其改装成静态资源服务器,代码如下:

如何用nodejs的http模块创建一个简单的静态资源服务器

此时,我们已经初步完成了,静态资源服务器的功能,貌似完成了,我们在www目录下新建一个索引。html,然后测试访问以下服务器:

如何用nodejs的http模块创建一个简单的静态资源服务器

访问结果如下:

如何用nodejs的http模块创建一个简单的静态资源服务器

为什么是这样的呢?我们看响应头:

如何用nodejs的http模块创建一个简单的静态资源服务器

这里并没有给我们标识正确的mime响应头,我们该如何呢?

此时需要借助一个第三方包,哑剧,这个包有两个方法,一个是根据url的后缀获取请求文件的mime类型一个是根据mime类型判断文件后缀,显然我们需要第一种,官方文档演示代码如下:

如何用nodejs的http模块创建一个简单的静态资源服务器

服务器代码更改如下:

如何用nodejs的http模块创建一个简单的静态资源服务器

观察上面代码,我们引入了,mime模块,获取到了文件的mime类型,然后额外增加了一个判断,如何mime类型中包含文本就追加编码格式为utf8,这样做是强制浏览器按照utf8模式解析文本数据,防止浏览器按照默认编码格式解析文本。

此时运行服务器,查看结果:

如何用nodejs的http模块创建一个简单的静态资源服务器

查看网络的响应头:

如何用nodejs的http模块创建一个简单的静态资源服务器

查看红框中的内容,响应头已经被设置好了。

上面的代码中有个彩蛋不知道大家有没有注意到,res。writeheader方法不仅可以设置http规范的响应头,还可以设置自定义响应头,上图中小编设置了一个clm1100的响应头。

这次貌似又完成了,但是大家想想,如果静态文件很大,我在www放了一个avi的视频,上面的代码还能正常运行吗,这将avi的大小,如果avi大小超过服务器内存,恩,服务器挂掉了。

怎么解决呢?这里用到了nodejs里面另外一个东西,流,流。看代码:

如何用nodejs的http模块创建一个简单的静态资源服务器

此时观察上面的代码,我们发现这次没有使用fs的readFile方法,而是换成了,fs。createReadStream方法,将文件转化成一个流,然后将这个流用管连接到了res上,然后就直接输出到客户端了,这里读取文件的方式,就是读取一块响应一块,而不是一次性的读取了。关于流的使用,咱们下篇文章在讨论。

如何用nodejs的http模块创建一个简单的静态资源服务器