node中有一个非常强大的模块,就是用于创建网络应用的HTTP模块。例如我们可以创建一个服务监听某个给定的端口,这样我们就可以为客户创建一个后端服务。就像React或者Angular创建的应用,或者在手机上使用的移动端应用。
回到node的文档中,可以找到HTTP模块的信息,在这里可以看到很多类,比如http.Agent、http.ClientRequest等等。每个类都有很多熟悉,方法和事件。


server也是一个EventEmitter类,自然也是具备所有EventEmitter的功能。

node的官方文档中的HTTP模块可以看到http.Server,点进去就知道这个类继承自net.Server类,这是另一个定义在net模块中的类,点进去看文档说明知道net.Server是一个EventEmitter。这也是说在node中很多功能都基于EventEmitter



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

server就会发起事件。自然我们就可以使用on方法来处理事件,在监听之前我们先要创建一个监听器,或者说是句柄。

connection,可以在文档中找到,第二个是一个回调函数,或者说是真正的监听者。这个监听者是一个socket类的实例。在控制台运行可以看到它在监听3000端口了,需要停止监听直接Ctrl+C键强制退出即可。

http://localhost:3000/

server对象可以发起不同的事件待我们处理。
现在我们换一种方式,直接给CreateServer方法一个回调函数,这个函数需要两个参数。分别是请求和响应,这样就可以直接操作真实的request和response对象。我们可以检测如果请求的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模块的功能。