{"id":22433694,"url":"https://github.com/gavinning/http","last_synced_at":"2025-07-29T17:15:28.577Z","repository":{"id":35645056,"uuid":"218737695","full_name":"gavinning/HTTP","owner":"gavinning","description":"HTTP工具包，更高效的接口调用方式","archived":false,"fork":false,"pushed_at":"2022-12-30T19:32:49.000Z","size":90,"stargazers_count":0,"open_issues_count":8,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-10-11T00:07:55.719Z","etag":null,"topics":["api","axios","http"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gavinning.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-10-31T10:12:08.000Z","updated_at":"2020-05-16T04:28:22.000Z","dependencies_parsed_at":"2023-01-16T02:02:41.314Z","dependency_job_id":null,"html_url":"https://github.com/gavinning/HTTP","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gavinning%2FHTTP","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gavinning%2FHTTP/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gavinning%2FHTTP/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gavinning%2FHTTP/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gavinning","download_url":"https://codeload.github.com/gavinning/HTTP/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245806390,"owners_count":20675296,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","axios","http"],"created_at":"2024-12-05T22:15:41.130Z","updated_at":"2025-03-27T07:45:50.729Z","avatar_url":"https://github.com/gavinning.png","language":"JavaScript","readme":"HTTP\n---\nHTTP工具包，更高效的接口调用方式\n\n### Install\n```sh\nnpm i @4a/http\n```\n\n### Usage\n接口对象配置详请参照 [``axios.options``](https://github.com/axios/axios#request-config)\n```js\nconst api = {\n\n    user() {\n        return {\n            url: '/api/user',\n            method: 'GET'\n        }\n    },\n\n    post(data) {\n        return {\n            url: '/api/post',\n            data,\n            method: 'POST'\n        }\n    },\n}\n\nmodule.exports = api\n```\n```js\nconst HTTP = require('@4a/http')\n\n/**\n * @param {Object} api 接口配置，必须\n * @param {String | Function} token 可选，推荐\n * @param {String} baseURL 可选，推荐\n * @param {Number} timeout 超时时间，可选，推荐\n * @param {Function} before 请求预处理函数，可选\n * @param {Function} resolver 请求后处理函数，可选，推荐\n */\nconst http = new HTTP({\n    api,\n    token,\n    baseURL,\n    timeout,\n    // 可用于添加签名等预处理操作\n    before(options) {\n        options.params = options.params || {}\n        options.params.sign = 1\n        return options\n    },\n    /**\n     * 请求后处理\n     * @param {Error} err 错误实例\n     * @param {Object} response axios响应结果\n     * @param {Object} options axios请求参数\n     * @param {HTTP} http\n     */\n    async resolver(err, response, options, http) {\n        if (err) {\n            // 可在此处执行 错误处理，错误上报 等操作\n            console.error('请求异常:', err)\n            throw err\n        }\n        if (response.data \u0026\u0026 response.data.code !== 0) {\n            // 可在此处执行 异常处理，异常上报 等操作\n            console.warn('请求异常:', response.data.message)\n        }\n        return response.data\n    }\n})\n```\n\n### Example\n高级操作：token失效，自动刷新，自动重试上次请求\n```js\nconst http = new HTTP({\n    api,\n    token,\n    baseURL,\n    timeout,\n    // 如果下游使用Promise的方式处理异常\n    // 这里的resolver参数应该用async函数\n    async resolver(err, response, options, http) {\n        \n        // 错误上报\n        if (err) {\n            action.error(err, {\n                action: '请求异常',\n                context: options\n            })\n            throw err\n        }\n\n        // 校验token异常\n        if ( isTokenError(response.data.code) ) {\n            // 刷新token\n            await auth.refreshToken()\n            // 更新token\n            options.headers = http.$auth()\n            // 重试上次请求\n            return (await axios(options)).data\n        }\n\n        // 异常上报\n        if (response.data.code !== 0) {\n            action.error(null, {\n                action: '请求异常',\n                context: options,\n                key: 'code',\n                value: response.data.code,\n                message: response.data.message\n            })\n        }\n\n        return response.data\n    }\n})\n```\n\n#### 请求发起示例\n```js\nhttp.user() // 实例方法根据接口配置自动生成\nhttp.post({ title: 'foo', content: 'bar' })\n```\n\n### 依赖模块导出\n```js\n// axios导出\nHTTP.axios // 原生axios模块引用\n\n// extend导出\nHTTP.extend // 原生extend模块引用\n```\n\n\n#### 关于token\n* 这里的token指的是jwt标准的token  \n* token参数支持``string``类型和``function``类型  \n* 如果配置了token参数则会自动在header里添加token 用于请求某些需要token的api\n\n\n\u003cbr /\u003e\n\n\u003e npm test\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgavinning%2Fhttp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgavinning%2Fhttp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgavinning%2Fhttp/lists"}