温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-07-16 17:43:11 来源:亿速云 阅读:639 作者:chen 栏目:大数据

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

nodejs自问世以来,基于nodejs的web开发框架层出不穷,TJ大神的express和koa,阿里的egg,360大神李成银的thinkjs等等,这些框架是学不完的。

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

在开始写代码之前,我们首先要了解http的模型,http的模型是基于请求=》处理=》响应这样的一个过程。

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

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

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

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

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

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

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

访问结果如下:

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

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

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

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

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

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

服务器代码更改如下:

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

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

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

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

查看network的响应头:

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

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

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

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

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

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

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

到此,相信大家对“如何用nodejs的http模块创建一个简单的静态资源服务器”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI