README
hjttp
Awesome Network Request package, Enjoy it. ✨✨✨
Install
yarn add hjttp
or
npm install hjttp
Introduce
- based on fetch
- you can set duration and message when network timeout.
- you can judge whether the response is successful or not.
- you can listen request and response by call
apiRequestCallback
、apiResponseSuccess
、apiResponseFailure
- you can intercept and change response by call
apiResponseIntercept
Common Configuration:
Prop | Type | Default Value | Description |
---|---|---|---|
method | String | POST |
|
cache | String | no-cache |
|
headers | Object | {'Accept': 'application/json','Content-Type': 'application/json;charset=utf-8','Cache-Control': 'no-cache',} |
|
parse | Function | _ => _.json() |
parse response data |
timeoutDuration | Number | 1000 * 10 |
|
timeoutMessage | String | Network Timeout |
|
apiRequestCallback | Function | _ => _ |
params is request |
apiResponseSuccess | Function | _ => _ |
params is { request, response } |
apiResponseFailure | Function | _ => _ |
params is { request, error } |
apiResponseIntercept | Function | (req, resp, opt) => resp |
Usage
import Http from 'hjttp'
Http.timeoutDuration = 1000 * 60
Http.timeoutMessage = 'Network is timeout, Please try again.'
const api = Http.load({
url: 'http://api.website.com/login.do',
body: {
'key': value
}
}, {
reformer: (response) => {
let result = JSON.parse(JSON.stringify(response))
result.code = Number(result.code)
result.message = result.msg
result.ok = result.code == 0
return result
},
})
api.then(data => {
/**
success
*/
}).catch(error => {
const {
code,
message,
ok,
} = error
/**
when `ok` is equal `false`, it means that the server tell you the operation is not successful.
when `ok` is equal `undefined`, it means that your code have error, or the server itself have error.
*/
// show toast ...
})
Http.apiRequestCallback = (request) => {
console.log(`\n${'*'.repeat(115)}\n*${' '.repeat(51)}Request Start${' '.repeat(50)}*\n${'*'.repeat(115)}\n`)
console.log('HTTP URL:\n\t' + request.url)
console.log('\nHTTP Method:\n\t' + request.method)
console.log('\nHTTP Headers:\n\t' + JSON.stringify(request.headers, null, 0))
console.log('\nHTTP Body:\n\t' + request._bodyText)
console.log(`\n${'*'.repeat(115)}\n*${' '.repeat(51)}Request End${' '.repeat(52)}*\n${'*'.repeat(115)}\n`)
}
Http.apiResponseSuccess = ({ request, response }) => {
let body = ""
try {
body = JSON.parse(request._bodyText)
} catch (e) {}
const req = {
url: request.url,
body,
}
console.log(`\n${'*'.repeat(115)}\n*${' '.repeat(50)}Response Start${' '.repeat(50)}*\n${'*'.repeat(115)}\n`)
console.log('Request:\n' + JSON.stringify(req, null, 4))
console.log('\nResponse Status:\n\t' + response.status)
console.log('\nResponse Body:\n' + JSON.stringify(JSON.parse(response._bodyText), null, 4))
console.log(`\n${'*'.repeat(115)}\n*${' '.repeat(50)}Response End${' '.repeat(52)}*\n${'*'.repeat(115)}\n`)
}
Http.apiResponseFailure = ({ request, error }) => {
const req = {
url: request.url,
body: JSON.parse(request._bodyText),
}
console.log(`\n${'*'.repeat(115)}\n*${' '.repeat(50)}Response Start${' '.repeat(50)}*\n${'*'.repeat(115)}\n`)
console.log('Request:\n\t' + JSON.stringify(req, null, 4))
console.log('\nResponse Body:\n\t' + error.status + ', ' + error.message)
console.log(`\n${'*'.repeat(115)}\n*${' '.repeat(50)}Response End${' '.repeat(52)}*\n${'*'.repeat(115)}\n`)
}
Http.apiResponseIntercept = (request, response, option) => {
return new Promise((resolve, reject) => {
const { url } = request
const { code } = response
if (url.includes('/login.do')) {
if (code >= 1000000) {
reject()
/**
handle ...
*/
} else {
resolve(response)
}
} else {
resolve(response)
}
})
}
Contact me
github.com/mr-huangjian
mr.huangjian@foxmail.com