Node学习之HTTP模块

162 阅读3分钟

node中有一个非常强大的模块,就是用于创建网络应用的HTTP模块。例如我们可以创建一个服务监听某个给定的端口,这样我们就可以为客户创建一个后端服务。就像React或者Angular创建的应用,或者在手机上使用的移动端应用。

回到node的文档中,可以找到HTTP模块的信息,在这里可以看到很多类,比如http.Agenthttp.ClientRequest等等。每个类都有很多熟悉,方法和事件。

打开编辑器,实际上手才是最重要的。
这里的server也是一个EventEmitter类,自然也是具备所有EventEmitter的功能。
node的官方文档中的HTTP模块可以看到http.Server,点进去就知道这个类继承自net.Server类,这是另一个定义在net模块中的类,点进去看文档说明知道net.Server是一个EventEmitter。这也是说在node中很多功能都基于EventEmitter

回到编辑器,继续写下去。

当我们在控制台运行应用的时候,就会监听端口号3000。就像之前所说的,当有一个请求或者了解,server就会发起事件。自然我们就可以使用on方法来处理事件,在监听之前我们先要创建一个监听器,或者说是句柄。
上面的事件第一个参数的事件名称是connection,可以在文档中找到,第二个是一个回调函数,或者说是真正的监听者。这个监听者是一个socket类的实例。在控制台运行可以看到它在监听3000端口了,需要停止监听直接Ctrl+C键强制退出即可。
在浏览器打开这个端口地址:http://localhost:3000/
回到控制台可以看到打印了“新的连接”的文字。所以这个server对象可以发起不同的事件待我们处理。

现在我们换一种方式,直接给CreateServer方法一个回调函数,这个函数需要两个参数。分别是请求和响应,这样就可以直接操作真实的requestresponse对象。我们可以检测如果请求的url/,我们就返回点东西给客户端。

浏览器打开,我们在网页中看到了文字Hello World

当然我们如果想创建一个网络应用的后端服务,需要处理很多的路由规则。我们继续添加一个if代码块。假设我们想从数据库返回课程的列表,当请求路径匹配的话,就返回一个json对象。

浏览器打开,在网页中我们看到了已经将数组转换为json数据格式的数据。
当然这样每次控制台执行后还需要手动打开浏览器还是有点麻烦,我们再改造下,让控制台执行后自动打开浏览器。

//require引入child_process,自动打开浏览器
const childProcess = require('child_process');
//监听后自动打开浏览器
childProcess.exec('start http://127.0.0.1:3000/');

这就是一个最基本的node创建的服务器,现实中我们不会使用http模块直接创建后端服务。原因是随着项目需求越来越多时,所需要写的路由规则也是随着增长。一直都是在回调函数中线性的增加它们的内容,取而代之的是使用一个叫Express的框架。它可以给应用一个清晰的结构,来处理不同的路由请求,使用Express来替代node原有的HTTP模块的功能。