http
模块是Node.js
官方提供的用来创建 Web服务器的模块。
http.server事件
http.server
是一个基于事件的http服务器,所有的请求都被封装成独立事件。它继承自EventEmitter
。提供了多种事件:
- request 客户端发送请求时,该事件被触发。它提供了
http.ServerRequest
和http.ServerResponse
两个实例参数 - connection 当TCP建立连接时,该事件被触发。它提供了一个
net.Socket
的实例参数 - close 当服务器关闭时,该事件被触发。
- 除上述事件外,还有checkContinue、upgrade、clientError事件
const http = require('http')
var server = new http.Server()
// connection 事件监听
server.on('connection', () => {
console.log("TCP 握手")
})
// request 事件监听
server.on('request', (req, res) => {
res.end("Hello Node.js")
})
// close 事件监听
server.on('close', () => {
console.log("服务器关闭")
})
server.close()
server.listen(80)
http.ServerRequest请求信息
http.ServerRequest
是HTTP请求信息,其分为:请求头和请求体。
http.ServerRequest
提供了3
个事件用于控制请求传输:
data
当请求体数据到来时,该事件被触发。该事件提供一个trunk参数,表示接受到的数据。若该事件没有被监听,则请求体会被抛弃end
当请求体数据传输完成时触发close
用户当前请求结束时触发
属性
名称 | 说明 |
---|---|
complete | 客户端请求是否已发送完成 |
httpVersion | HTTP协议版本 |
HttpVersion | HTTP协议版本 |
method | HTTP请求方法 |
url | HTTP请求路径(不包含请求协议、域名、端口号) |
headers | HTTP请求头 |
trailers | HTTP请求尾信息 |
connection | HTTP连接套接字,为 net.Socket实例 |
socket | connection别名 |
client | client属性别名 |
http.ServerResponse 响应信息
当HTTP服务器接受到一个请求时,它在内部会创建一个ServerResponse对象。
方法
名称 | 说明 |
---|---|
setHeader(name, value) | 设置响应头信息 |
getHeader(name) | 获取响应中设置的一个HTTP标头 |
removerHeader(name) | 移除响应中设置的一个HTTP标头 |
setTimeout(timeout [, callback]) | 设置客户端连接的套接字超时时间 |
write(data[, encoding]) | 向响应流(Writeable ) |
end([data [, encoding]]) | 向响应流(Writeable ) |
注意:
**write()和end()**都是表示向响应流中写入数据。**write()**可多次调用,**end()**只能被调用一次。
搭建HTTP服务
http
模块提供了多种方式用于搭建HTTP服务。
方式一
const http = require('http')
// 创建 Web 服务实例
const server = http.createServer()
// 为 服务器实例绑定 request 事件, 监听客户端请求
server.on('request', (req, res) => {
res.end("Hello Node.js")
})
// 启动服务
server.listen(80, () => {
console.log("Server is staring ...")
})
方式二
const http = require('http')
// 创建 Web 服务实例并监听客户端请求
http.createServer((req, res) => {
res.end("Hello Node.js")
}).listen(80, () => {
console.log("Server is staring ...")
})
方式三
const http = require('http')
// 创建 请求响应处理函数
function handle(req, res) {
res.end("Hello Node.js")
}
http.createServer(handle).listen(80, () => {
console.log("Server is staring ...")
})