本文简单介绍一下如何使用node.js构建一个简单的web服务器。构建web服务器的基本步骤如下1引入http模块2创建Web服务器实例3启动监听服务器4为Web服务器实例绑定request事件5根据客户端请求进行响应1.http模块简介在Node.js中http模块是内置的核心模块之一使用该模块可以轻松搭建Web服务器和客户端实现Web应用的请求与响应。在实际应用中http模块一般用来构建服务器。http 模块的核心是处理客户端请求和服务端响应的全生命周期。1请求方式Node.js http 模块支持所有标准 HTTP 请求方法通过 req.method 获取常用的有方法用途示例GET获取资源无请求体查询数据、页面访问POST提交资源带请求体提交表单、创建数据PUT全量更新资源更新用户全部信息DELETE删除资源删除一条数据(2) 请求头Request Headers客户端传递的附加信息如数据格式、客户端类型通过 req.headers 获取常用头信息Content-Type请求体的数据格式如application/json、application/x-www-form-urlencodedUser-Agent客户端标识浏览器 、 Postman 、 移动端Authorization身份验证如 Token。(3) 请求体Request BodyPOST、PUT 等方法携带的业务数据GET 无请求体需通过流事件拼接获取http 模块原生需手动处理。4响应状态码Status Code通过 res.writeHead(状态码) 设置核心状态码分类状态码区间含义常用示例2xx成功200请求成功4xx客户端错误400参数错误、404路径不存在5xx服务端错误500服务器内部错误状态码区间 含义 常用示例2xx 成功 200请求成功4xx 客户端错误 400参数错误、404路径不存在5xx 服务端错误 500服务器内部错误5响应头Response Headers告诉客户端响应数据的格式、编码等信息常用Content-Type响应体格式如 application/json、text/html、text/plainAccess-Control-Allow-Origin跨域允许的源解决前端跨域Set-Cookie设置客户端 Cookie。6响应体Response Body服务端返回的实际业务数据通过 res.end(内容) 发送支持字符串、Buffer 等格式JSON 需手动序列化。2.创建项目我们使用vscode创建项目在控制台中输入mkdirwebcdweb这样创建一个名字为web的文件夹。然后用vscode打开这个文件夹。然后点击“终端”点击“新建终端”然后在控制台中输入npminit-y初始化这个项目。package.json这个文件里面创建完代码如下{name:web,version:1.0.0,description:,main:index.js,scripts:{test:echo \Error: no test specified\ exit 1},keywords:[],author:,license:ISC,type:commonjs}1创建文件index.js点击创建文件。文件名为index.js(2)引入http并创建Web服务器http模块只需要引入即可语法很简单varhttprequire(http);使用http模块的createServer()方法可以创建Web服务器返回http.Server对象实例语法为http.createServer();可以给Web服务器示例命名这里暂时命名为Servervarserverhttp.createServer();(3)启动监听服务器在创建了Web服务器实例Server后使其listen()方法启动该Web服务器语法为server.listen([port[,host[,backlog]]][,callback])参数说明port:端口号host:主机名backlog:server.listen()方法的通用参数callback:Web服务器启动后的回调函数一个例子为server.listen(3000,function(){console.log(Server is listening on port 3000);});(4)为Web服务器绑定request事件使用http模块创建的Server实例是一个基于事件的Web服务器有一个request事件监听器来自客户端的http请求会被自动添加到request事件中。构建服务器的目的是对外提供资源服务服务器构建后就要为服务器绑定request事件用来监听客户端发来的请求一旦有请求发送过来就会触发request事件服务器根据代码做出响应。绑定request事件的代码如下server.on(request,function(request,response){//事件驱动编程//这里是分析请求进行响应。});上述代码中的server.on()事件监听函数有两个参数第一个参数“request”是事件名表示只有要服务器接收到客户端的请求这段代码就会被执行第二个参数是一个回调函数含request和reponse两个对象参数。request对象封装了请求报文的相关内容通过分析request对象可以知道客户端发送的具体请求信息包括请求方式、URL、请求头等response对象封装了服务器响应报文的相关内容比如响应的字符串、响应的数据对象等。注意request和response的写法不是固定的有时也会简写为req和res比如下面这样server.on(request,function(req,res){//事件驱动编程//这里是分析请求进行响应。});(5)编写response进行响应在服务器的监听函数内部通过回调函数的response对象响应处理客户端的请求可以完成发送响应头、发送响应正文、结束响应等操作。response对象常用的方法如下5.1 response.writeHead()方法该方法用于向请求发送响应头语法为response.writeHead(STATUS_CODES[,statusMessage][,headers]);参数说明如下STATUS_CODES一个三位数的HTTP状态码比如200、404statusMessage可选用户可读的statusMessageheaders要发送的响应头5.2 response.setHead()方法这个方法用于设置单个响应头的只语法为response.setHeader(name,value);参数说明如下name响应头字段名称value响应头字段的值如果设置的字段已经存在于待发送的响应头中则其值将被替换5.3 response.write()方法该方法用于发送响应正文可以多次调用该方法以提供连续响应语法为:response.write(chunk[,encoding][,callback]);参数说明如下chunk响应主体的数据为字符串或Bufferencoding字符编码默认值为“utf-8”callback回调函数第一次调用response.write()方法时它会将缓存的响应头信息和正文的第一个块发送给客户端。第二次调用response.write()方法时Node.js会假定数据将被流式传输并单独发送新数据。也就是说响应正被缓冲到正文的第一个块。5.4 response.end()方法该方法用于向服务器发送信号表明所有响应头和正文都已发送该服务器应认为此消息已完成。结束请求必须用到end()方法而且这个方法有且只有一次语法为response.end(data[,encoding][,callback]);参数说明data响应主体信息为字符串或Buffer缓存区可选。encoding字符编码默认值为“utf-8”callback回调函数3.Web构建的实例修改index.js文件如下varhttprequire(http);varserverhttp.createServer();//创建服务器对象server.on(request,function(request,response){//事件驱动编程response.setHeader(Content-Type,text/plain; charsetutf-8);//设置响应头response.writeHead(200,OK);//设置响应状态码和状态消息response.write(Hello World\n);//写响应体response.end();//结束响应});//启动服务器监听3000端口server.listen(4000,function(){console.log(Server is listening on port 4000);});在控制台中输入node indes.js开始运行程序可以看到下图服务端已经正常开启了。我们打开浏览器在浏览器中输入localhost:4000 访问一下服务器从上图可以看到正常访问。返回值也正常。