dwonload:Spring 5实战开发及新个性精讲

request 解析

用户发动申请的相干数据,都蕴含在 request 对象中。

这些数据蕴含罕用的申请办法,申请头,url,申请体等等数据。

const { method, url, headers } = request

method 示意申请办法可间接应用,headers 返回申请头对象,应用也比拟简便:

const { headers } = requestconst 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 设置