1.0.1 • Published 3 years ago

hjttp v1.0.1

Weekly downloads
14
License
-
Repository
github
Last release
3 years ago

hjttp

Awesome Network Request package, Enjoy it. ✨✨✨

Install

yarn add hjttp

or

npm install hjttp

Introduce

  1. based on fetch
  2. you can set duration and message when network timeout.
  3. you can judge whether the response is successful or not.
  4. you can listen request and response by call apiRequestCallbackapiResponseSuccessapiResponseFailure
  5. you can intercept and change response by call apiResponseIntercept

Common Configuration:

PropTypeDefault ValueDescription
methodStringPOST
cacheStringno-cache
headersObject{'Accept': 'application/json','Content-Type': 'application/json;charset=utf-8','Cache-Control': 'no-cache',}
parseFunction_ => _.json()parse response data
timeoutDurationNumber1000 * 10
timeoutMessageStringNetwork Timeout
apiRequestCallbackFunction_ => _params is request
apiResponseSuccessFunction_ => _params is { request, response }
apiResponseFailureFunction_ => _params is { request, error }
apiResponseInterceptFunction(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