dwonload:Spring 5 实战开发及新个性精讲
request 解析
用户发动申请的相干数据,都蕴含在 request 对象中。
这些数据蕴含罕用的申请办法,申请头,url,申请体等等数据。
const {method, url, headers} = request
method 示意申请办法可间接应用,headers 返回申请头对象,应用也比拟简便:
const {headers} = request
const userAgent = headers['user-agent'] // 申请头全是小写字母
唯独 url 字符串不好解析,外面蕴含了协定,hostname,path,query 等等。
所幸 Node.js 提供了 url 和 querystring 两个模块解析 url 字符串。
URL 解析
先看一个 url 模块的例子:
const url = require('url') // 解析 url 字符串
var string = 'http://localhost:8888/start?foo=bar&hello=world'
var url_object = url.parse(string)
// {protocol: 'http:', host:'localhost:8888', pathname: '/start', query: 'foo=bar&hello=world'}
看到了吧,url 模块能够将一个残缺的 URL 地址字符串,拆分成一个蕴含各局部属性的对象。
然而美中不足,其余局部都解析进去了,唯独 query 还是一个字符串。
query 须要二次解析。怎么办呢?这时候第二个模块 querystring 出场了:
const querystring = require('querystring') // 解析 query 字符串
var string = 'http://localhost:8888/start?foo=bar&hello=world'
var url_object = url.parse(string) // {query: 'foo=bar&hello=world'}
var query_object = querystring.parse(url_object.query)
// {foo: 'bar', hello: 'world'}
这下就完满了。用 url + querystring 组合,能够残缺解析你的 URL。
申请体解析
对于 POST 或者 PUT 申请,咱们须要接管申请体的数据。
这里申请体比拟非凡,它不是一次性传过来的数据,而是通过 Stream 流的形式流式传递来的,因而要通过监听 data 和 end 事件一点点的接管。
获取办法如下:
server.on('request', (request, response) => {let body = []
request.on('data', chunk => {
// 这里的 chunk 是一个 Buffer
body.push(chunk)
})
request.on('end', () => {body = Buffer.concat(body)
})
console.log(body.toString())
})
response 设置