body.js
1.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/**
* Body Interceptor.
*/
import Url from '../../url/index';
import { when, isArray, isObject, isFormData } from '../../util';
export default function (request, next) {
if (isFormData(request.body)) {
request.headers.delete('Content-Type');
} else if (isObject(request.body) || isArray(request.body)) {
if (request.emulateJSON) {
request.body = Url.params(request.body);
request.headers.set('Content-Type', 'application/x-www-form-urlencoded');
} else {
request.body = JSON.stringify(request.body);
}
}
next(response => {
Object.defineProperty(response, 'data', {
get() {
return this.body;
},
set(body) {
this.body = body;
}
});
return response.bodyText ? when(response.text(), text => {
var type = response.headers.get('Content-Type') || '';
if (type.indexOf('application/json') === 0 || isJson(text)) {
try {
response.body = JSON.parse(text);
} catch (e) {
response.body = null;
}
} else {
response.body = text;
}
return response;
}) : response;
});
}
function isJson(str) {
var start = str.match(/^\[|^\{(?!\{)/), end = {'[': /]$/, '{': /}$/};
return start && end[start[0]].test(str);
}