返回 导航

React / React Native

hangge.com

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-urlencodedapplication/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.bodyres.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)

回到顶部