文章目录
前言一、导入http模块二、创建服务器对象 http.createServer()listen()close()三、创建请求、响应对象 请求对象req响应对象res前言
Node.js核心模块——http模块,用以创建Web服务器,从而对外提供Web资源服务。本章简明扼要地阐述使用http模块内置http.createServer()方法实例化http.Server类,并创建请求、响应对象,搭建简单的Web服务器。完整API参照官方文档:http 超文本传输协议 | Node.js API 文档
一、导入http模块
我们通过以下方式来引入该模块:
const http = require('http');
二、创建服务器对象
http.createServer()
通过http模块内置方法:http.createServer(),创建一个新的服务器时,将会实例化http.Server类,从而创建一个服务器对象
// 导入http模块const http = require('http');// 创建Web服务器对象const server = http.createServer();
如上:当要有了服务器对象server后,便可以访问其方法:listen()与close()
listen()
服务器对象通过.listen(端口号, 回调)方法启动HTTP服务器:
// 导入http模块const http = require('http');// 创建Web服务器对象const server = http.createServer();// 监听端口号5005并启动HTTP服务器server.listen(5005, () => {console.log('Web服务器启动成功啦!')})
终端输入node指令启动服务器:
close()
同理,服务器对象通过调用.close([callback])方法,停止服务器并不再接受新的连接
三、创建请求、响应对象
当创建完服务器对象并可以通过listen()设置端口启动服务器后,我们需要监听客户端发来的请求,并且还需要向客户端做出响应,我们可以使用node.js事件触发器.on()方法为服务器对象绑定request事件,当客户端访问服务器时,触发事件处理函数:
// 服务器实例通过.on()方法为服务器绑定request事件,监听客户端发来的请求,触发事件处理函数server.on('request', (req, res) => {console.log('Web服务器被访问啦!')})
我们通过浏览器输入本地服务器地址检验:
请求对象req
当服务器实例监听request事件时,将会创建类http.IncomingMessage的实例对象,通常叫做请求对象req,作为事件处理函数的第一个参数,用来访问与客户端请求相关的数据和属性,如:
使用statusCode
和statusMessage
方法来访问状态。使用headers
方法或rawHeaders
来访问消息头。使用method
方法来访问 HTTP 方法。使用httpVersion
方法来访问 HTTP 版本。使用url
方法来访问 URL。使用socket
方法来访问底层的 socket。
例如:
// 导入http模块const http = require('http');// 创建Web服务器实例const server = http.createServer();// 服务器实例通过.on()方法为服务器绑定request事件,监听客户端发来的请求,触发事件处理函数server.on('request', (req, res) => {// req.httpVersion访问http版本const version = req.httpVersion;// req.url访问客户端请求的 URL 地址const url = req.url;// req.method访问客户端请求的 method 类型const method = req.method;const str = `Your request url is ${url}, request method is ${method} and httpVersion is ${version}`;console.log(str);})// 服务器实例通过.listen(端口号, 回调)方法启动Web服务器server.listen(5005, () => {console.log('Web服务器启动成功啦!')})
启动服务器并访问url为post的地址:
响应对象res
同理,http.ServerResponse类也会创建实例对象,通常称作响应对象res,作为事件处理函数的第二个参数,在事件处理函数中,响应对象res通过调用end()方法用于将服务器的数据或属性响应给客户端,如:
// 服务器实例通过.on()方法为服务器绑定request事件,监听客户端发来的请求,触发事件处理函数server.on('request', (req, res) => {const version = req.httpVersion;const url = req.url;const method = req.method;const str = `Your request url is ${url}, request method is ${method} and httpVersion is ${version}`;// 调用res.end()方法向客户端响应一些内容res.end(str);})
启动并访问服务器即可收到响应数据字符串:
同时,该对象提供一些方法与HTTP消息头进行交互,如我们可以通过res.setHeader('Content-Type', 'text/html; charset=utf-8'),规定编码格式,解决响应中文乱码。
const testChinese = '测试中文乱码!'; // 若不设置响应头将会乱码// 设置响应头,解决中文乱码res.setHeader('Content-Type', 'text/html; charset=utf-8');// 调用res.end()方法向客户端返回中文字符串res.end(testChinese);