乐趣区

关于spring:Spring-5实战开发及新特性精讲

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 设置

退出移动版