jshttp


JsHttp 是一个基于 Axios 的 Javascript HTTP 请求库,支持在任何 Javascript 环境中发起 HTTP 请求(目前已支持 Node.js,浏览器,各大平台小程序,包含微信、QQ、支付宝、字节跳动等平台),在各个环境提供完全一致 API。
目录
介绍
背景
在日常的开发中,发起一个 HTTP 请求是非常常见的需求,作为一个全栈开发者,笔者需要同时开发 Node.js,Web,小程序 等端,在各端上都有各自推荐使用的 HTTP 请求库或者官方请求方法,笔者在使用过程中的一个痛点是需要去记住各自的参数,每次使用还需要查文档,十分不方便。同时各个 HTTP 请求库都有一定的局限性,并不是完全符合笔者的需求,于是笔者就打算自己写一个可以横跨所有 Javascript 平台的 HTTP 请求库。
另外,常用的 HTTP 请求库 Axios 本身已经非常成熟了,因此笔者基于 Axios 进行开发,拓展了 Axios 原生的 adapter 和 interceptor 来完成对应功能。
特点
JsHttp 具有以下特点:
- 支持所有的
Javascript 环境(也就是说,只要你在用 Javascript 写代码,你可以可以使用 JsHttp 来发起请求)。
- 完全兼容
Axios 参数,可以从 Axios 无缝迁移到 JsHttp。
- 内置了一些中间件,例如请求内容签名、格式转换等,进行简单配置后就可以直接使用。
- 全中文错误提示,更利于开发和调试。
安装
你可以使用 npm 来安装 JsHttp ,当然也可以使用其他工具(yarn, cnpm 等)安装,在你的项目目录安装即可,无需全局安装。
安装命令:
$ npm install jshttp
使用
如果你使用过 Axios,那么你几乎可以无缝迁移到 JsHttp,因为 JsHttp 提供了和 Axios 几乎完全一致的 API 和 配置参数 。在本节中,将告知你一些基本的使用方式。
发起一个请求
const jshttp = require('jshttp')
jshttp({
method: 'POST',
baseURL: 'https://debub.inlym.com',
url: '/request/abc/def',
params: {
id: 1,
},
data: {
name: 'inlym',
age: 29,
},
}).then((res) => {
console.log(res.status)
console.log(res.headers)
console.log(res.data)
})
更方便的调用方式
对应一些常用的 请求方法,可以直接以 jshttp[mehtod] 的方式发起请求,例如:
jshttp
.get({
baseURL: 'https://debub.inlym.com',
url: '/request/abc/def',
})
.then((res) => {
})
当然对于更简单的请求,例如只有一个 url 地址的,可以直接使用下面这种方式:
jshttp.get('https://debub.inlym.com/request?id=1').then((res) => {
})
配置项
上面的使用示例列举了一些请求参数,下面例举所有的可用请求参数(同时提供了参数示例):
{
method: 'GET',
baseURL: 'https://debug.inlym.com',
url: '/path/to',
headers: {
'Content-Type': 'application/json',
},
params: {
name: 'inlym',
},
data: {
nickname: 'good boy',
sex: 'male',
},
mock: {
status: 200,
headers: {
'content-type': 'application/json',
},
data: {
nickname: 'good body',
age: 19,
},
delay: 2000,
},
retry: 0,
responseType: 'json',
responseEncoding: 'utf8',
timeout: 0,
middleware: [],
validateStatus: function (status) {
return typeof status === 'number' && status >= 200 && status < 300
},
adapter: function (config) {
return {
status: 200,
statusText: 'OK',
headers: {},
data: {},
}
},
responseItems: ['status', 'statusText', 'headers', 'data'],
}
作者
我是 inlym ,一个 Javascript 开发者。
如果你有任何问题或者建议,欢迎联系我,以下是我的联系方式:
参与
非常欢迎你能够参与这个项目的开发和维护,你可以通过以下几种方式参与到项目中:
- 提建议和需求。对于几句话就能说清楚的建议和需求,你可以直接 提一个 New Issue 。
- Fork 项目,修改代码,然后提交 Pull requests 。(提交前请检查务必通过 ESLint 检查)
许可证
本项目使用 MIT 许可证。