React Native - 网络请求库SuperAgent使用详解2(响应结果处理)
作者:hangge | 2017-05-23 08:10
八、响应属性介绍(Response properties)
在请求返回的 Response 对象中,有许多有用的标志和属性,下面分别进行介绍。
1,响应文本(Response text)
res.text 属性包含了未解析的返回字符串。
request.del('https://httpbin.org/get') .end(function(err, res){ alert(res.text); });
2,响应体(Response body)
对于 pplication/x-www-form-urlencoded、application/json 以及 multipart/form-data 。SuperAgent 会自动解析响应体。(1)JSON / Urlencoded
假如一个请求返回如下 JSON 字符串:
{"user":{"name":"tobi"}}我们通过 res.body.user.name 可以得到“tobi”。同样的,如果是 x-www-form-urlencoded,使用 user[name]=tobi 会得到同样的结果。
(2)Multipart
当解析 multipart 返回时,除了 res.body,res.files 也是可用的。假设请求响应结果为如下 multipart 结构:
--whoop Content-Disposition: attachment; name="image"; filename="tobi.png" Content-Type: image/png ... data here ... --whoop Content-Disposition: form-data; name="name" Content-Type: text/plain Tobi --whoop--我们通过 res.body.name 可以得到“Tobi”。而 res.files.image 得到一个 File 对象,其中包含磁盘路径、文件名、以及其他属性。
3,响应头字段(Response header fields)
res.header 为一个包含解析过的响应头字段的对象。比如:res.header['content-length']
4,响应内容类型(Response Content-Type)
假如响应类型(Content-Type)为:text/html; charset=utf8- res.type 值为:text/html
- res.charset 值为:utf8
5,响应状态(Response status)
同返回响应状态标志,我们可以知道请求是否成功,或者得到一些其它的信息。SuperAgent 定义了如下标志:var type = status / 100 | 0; // status / class res.status = status; res.statusType = type; // basics res.info = 1 == type; res.ok = 2 == type; res.clientError = 4 == type; res.serverError = 5 == type; res.error = 4 == type || 5 == type; // sugar res.accepted = 202 == status; res.noContent = 204 == status || 1223 == status; res.badRequest = 400 == status; res.unauthorized = 401 == status; res.notAcceptable = 406 == status; res.notFound = 404 == status; res.forbidden = 403 == status;
九、错误处理
请求回调函数中始终会有两个参数:错误(err)和响应(res)。而如果没有发生错误,第一个参数(err)将为 null。
request.del('https://httpbin.org/get') .end(function(err, res){ alert(res.text); });
1,可以单独监听响应错误事件
request.del('https://httpbin.org/get') .on('error', handle) .end(function(err, res){ alert(res.text); });
2,HTTP错误响应处理
默认情况下,4xx 或 5xx 这样的响应也是被认为是错误的。(1)如果我们希望处理 404 或其他 HTTP 错误响应,可以通过 err.status 属性来判断。
if (err && err.status === 404) { alert('发生404错误:' + res.body.message); } else if (err) { //处理其他类型的错误 }
(2)可以通过 .ok(callback) 方法来决定一个响应是否是错误的。如果这个方法返回 true,则表示这个响应是正确的。
request.get('https://httpbin.org/404') .ok(res => res.status < 500) .then(response => { //404页面也被认为是成功的响应 })
全部评论(0)