文章目录
nodeJs的http模块是什么
传统的HTPP服务器会由Aphche、Nginx、IIS之类的软件来担任,但是nodejs并不需要,nodejs提供了http模块,本身就可以用来构建服务器,而且http模块是由C++实现的,性能可靠。
如何搭建一个简单的http服务器
//引入node自带的模块 http 这个模块可以调用函数 来创建后端服务器
var http=require("http")
//创建一个服务器对象 回调函数不会直接运行 会在用户每次访问当前计算机的ip下的8081端口
var app=http.createServer((req,res)=>{
console.log(req.url) //用于调试代码的,显示用户输入的网址,为后面判断语句做铺垫
if(req.url=="/home"){ //当用户输入的网址是/home时执行下面代码
//配置返回给用户的数据包 的数据格式 和编码的类型utf8
res.setHeader("content-Type","text/html;charset=utf8")
//给前端最后一次发送数据包
res.end("<h1>欢迎访问</h1>")//string buffer
}
else if(req.url=="/login"){
//配置返回给用户的数据包 的数据格式 和编码的类型utf8
res.setHeader("content-Type","text/html;charset=utf8")
//给前端最后一次发送数据包
res.end("<h1>请登录</h1>")//string buffer
}
else {
//配置返回给用户的数据包 的数据格式 和编码的类型utf8
res.setHeader("content-Type","text/html;charset=utf8")
//给前端最后一次发送数据包
res.end("<h1>网址错误 404 </h1>")//string buffer
}
})
//监听计算机的端口:一切需要联网通信的软件都会占用一个端口号·端口号的范围从0-65536之间,这里我监听的是8081端口
app.listen(8081)
小黑窗显示"_“就代表服务器运行成功了,然后输入http://本机ip地址:端口号后面输入要访问的网址比如”/home"
可见访问成功了,若输入我们没设置的网址则返回网址错误 404
在上述创建服务器代码中,createServer方法中的参数函数中的两个参数req和res则是分别代表了请求对象和响应对象。
其中req是http.IncomingMessage的实例,res是http.ServerResponse的实例;
用createServer创建服务器其是是一种简便的方法;
另一种创建服务器的方法是使用new创建一个http.Server对象 用on来绑定事件的方法,比如:
var http=require("http")
var app=new http.Server();
app.on('request',(req,res)=>{ //第一个参数填事件类型,第二个参数填回调函数
//配置返回给用户的数据包的数据格式和编码类型
res.setHeader("content-Type","text/html;charset=utf8")
res.end('<h1>欢迎访问</h1>')
})
app.listen(8081)
http.Server的事件
http.Server提供的事件如下:
request:当客户端请求到来时,该事件被触发,提供两个参数req和res,表示请求和响应信息,是最常用的事件
connection:当TCP连接建立时,该事件被触发,提供一个参数socket,是net.Socket的实例
close:当服务器关闭时,触发事件(注意不是在用户断开连接时)
http.IncomingMessage(req)和http.ServerResponse(res)
http.IncomingMessage是HTTP请求的信息,一般由http.Server的request事件发送,并作为第一个参数传递,http请求一般可以分为两部分:请求头和请求体;其提供了3个事件,如下:
data:当请求体数据到来时,该事件被触发,该事件提供一个参数chunk,表示接受的数据,如果该事件没有被监听,则请求体会被抛弃,该事件可能会被调用多次(这与nodejs是异步的有关系)
end:当请求体数据传输完毕时,该事件会被触发,此后不会再有数据,相当于函数的return
close:用户当前请求结束时,该事件被触发,不同于end,如果用户强制终止了传输,也是用close
http.IncomingMessage(req)的属性有
属性名 | 含义 |
---|---|
httpVersion | http协议版本,通常是"1.1"或"1.0" |
method | 请求的方法,例如"GET"、"POST"等 |
statusCod | http响应状态码 |
statusMessage | http响应状态消息 |
headers | 请求头或响应头的对象 |
url | 发送http请求的客户端的url |
complete | 客户端请求是否已经发送完成 |
trailers | HTTP请求尾 |
http.ServerResponse是返回给客户端的信息,决定了用户最终看到的内容,一般也由http.Server的request事件发送,并作为第二个参数传递,它有三个重要的成员函数,用于返回响应头、响应内容以及结束请求
res.writeHead(statusCode,[heasers]):向请求的客户端发送响应头,该函数在一个请求中最多调用一次,如果不调用,则会自动生成一个响应头
res.write(data,[encoding]):想请求的客户端发送相应内容,data是一个buffer或者字符串,如果data是字符串,则需要制定编码方式,默认为utf-8,在res.end调用之前可以多次调用
res.end([data],[encoding]):结束响应,告知客户端所有发送已经结束,当所有要返回的内容发送完毕时,该函数必需被调用一次,两个可选参数与res.write()相同。如果不调用这个函数,客户端将用于处于等待状态。