node.js 系列8Http 模块
Posted lin_fightin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node.js 系列8Http 模块相关的知识,希望对你有一定的参考价值。
Http模块
http模块可以帮助我们创建服务器,目前有很多开源的web服务器,比如nginx,node.js等等。
初体验
这样我们的本地服务器,127.0.0.1:8080已经启动。
使用nodemon可以监听文件的变化,从而不用每次修改代码而要重新手动启动服务器。
接受一个requestListener,拿到的req,res就是请求参数以及返回对象,request,response的缩写。
第二种启动服务i器的方法 new http.Server
这种的本质跟http.createServer的本质是一样的,源码都是直接new Server()。
监听函数
接受三个参数,端口号,主机,还有回调函数。
这里其实是做了重载。
主机可以传入localhost,127.0.0.1和0.0.0.0它们的区别是
request对象,url内置对象, qs模块
也就是req对象,封装了客户端给我们服务器传递过来的所有信息,主要是url,
可以看到url,请求方式,请求头等等。
拿到url就可以判断当前是哪个网址,从而响应不同的内容。我们可以使用node内置模块,url
就可以准备的拿到pathname,query这些东西。还能使用querystring模块,这个模块专门对get请求的query模块做处理
使我们可以以对象的形式拿到数据。
method请求方法
如果传过来的是字符串,就可以用utf-8,如果是二进制啥的,就得用binary解码
因为在http中传输,是string类型,所以可以用json.parse转换。
req.headers
content-type是请求携带的数据体的类型,content-length,携带数据体的长度,keep-alive,
accept-encoding,告知服务器客户端支持的文件压缩格式,比如gzip
小结,http模块可以创建服务器,通过http.createServer((req,res)=>{})或者new Server(()=》{}),这两个本质都是一样的,都是new Server的。req这个对象一般封装了所有客户端传过来的数据,比如url,method,headers这些等等,url我们可以使用node内置的url模块来解析我们的url,可以使用querystring模块来解析我们的query等等,post请求的body我们得通过req.on(data,()=>{})拿到,因为http模块的body是通过流来进行传输的,此时我们的data拿到的是二进制buffer数组,因为拿到的是流,我们可以根据不同的数据通过req.setEncoding(utf-8)来解码不同的数据,从而拿到post请求的body数据
返回响应结果
response对象
res.end(xxx)的本质是,先调用res.witre(写入东西),然后res.end(callback)
响应码
响应header的设置
键值对设置,一次设置一个
这个响应Header的设置还是很重要的,
正常设置text/plain,浏览器不会认识html标签,会认为是字符串,
http中发送网络请求
get请求
post请求
post请求稍微不太一样,而且必须主动调用end方法才会真正发送网络请求。
http原生文件上传
使用postman模拟,一般使用from-data来文件上传
错误做法:
一般人都是想着拿到流然后使用fs.craeteWriteStream将数据写到一个新的文件去
可以生成,但是这个文件是打不开u的
因为我们写入的data字节流是有问题的,它不止包含图片的信息,还有一些其他的信息。
正确的做法
去掉文件的信息,只留图片的信息再写入
借助qs.parse(),截取
忘记加个编码
这样就能正常打开了、
以上是关于node.js 系列8Http 模块的主要内容,如果未能解决你的问题,请参考以下文章