{"id":13789220,"url":"https://github.com/hjkcai/wepy-plugin-axios","last_synced_at":"2025-05-12T05:31:58.696Z","repository":{"id":57397659,"uuid":"92471013","full_name":"hjkcai/wepy-plugin-axios","owner":"hjkcai","description":"在 wepy 中使用 axios","archived":true,"fork":false,"pushed_at":"2018-04-09T03:47:48.000Z","size":41,"stargazers_count":106,"open_issues_count":6,"forks_count":9,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-28T11:51:04.011Z","etag":null,"topics":["axios","wechat","wepy","wepy-plugin"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hjkcai.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-05-26T04:07:23.000Z","updated_at":"2023-04-12T01:30:53.000Z","dependencies_parsed_at":"2022-08-31T21:10:28.450Z","dependency_job_id":null,"html_url":"https://github.com/hjkcai/wepy-plugin-axios","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hjkcai%2Fwepy-plugin-axios","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hjkcai%2Fwepy-plugin-axios/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hjkcai%2Fwepy-plugin-axios/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hjkcai%2Fwepy-plugin-axios/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hjkcai","download_url":"https://codeload.github.com/hjkcai/wepy-plugin-axios/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253682431,"owners_count":21946936,"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":["axios","wechat","wepy","wepy-plugin"],"created_at":"2024-08-03T21:01:00.177Z","updated_at":"2025-05-12T05:31:58.358Z","avatar_url":"https://github.com/hjkcai.png","language":"JavaScript","funding_links":[],"categories":["微信小程序WePY框架开发资源汇总 ![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)","JavaScript"],"sub_categories":["WePY开源组件"],"readme":"# wepy-plugin-axios\n\n\u003e 🎉 首先感谢 axios 和 wepy 的作者提供了这么赞的库！\n\n这是一个能够让你在小程序中使用 axios 的 wepy 插件\n\n[axios文档](https://github.com/mzabriskie/axios) |\n[wepy文档](https://github.com/wepyjs/wepy)\n\n在制作小程序的时候，小程序内置的 `wx.request` 函数功能严重受限.\n即使是 `wepy.request` 也只是对原来的函数进行简单的封装, 并不能提供像 axios\n类似的高级功能. 所以我制作了这个插件来让小程序中可以使用 axios 的大部分功能.\n\n在保持 API 尽可能贴近 axios 原始 API 的情况下, 本插件对 `wx.request`,\n`wx.uploadFile`, `wx.downloadFile` 进行了封装. 同时提供了请求队列功能,\n解除了最多同时只发送5个请求的限制.\n\n喜欢就给个 Star 支持一下吧😏 欢迎开 issue 和 PR\n\n## 安装\n\n使用 npm 或 yarn 同时安装 axios 和 wepy-plugin-axios\n\n```bash\nnpm install axios wepy-plugin-axios --save\nyarn add axios wepy-plugin-axios\n```\n\n## 配置\n\n\u003e 注意: **本插件必须配合 wepy 使用**. 下面的例子使用的均为最新版本的 wepy.\n\u003e 如果你还不会用 wepy 或 axios, 请先阅读它们各自的文档\n\n1. 配置 wepy\n\n    在 `wepy.config.js` 的 `plugins` 中加入 `axios` 项.\n    插件没有选项,使用空对象作为选项即可\n\n    ```js\n    module.exports = {\n      // ...其它配置\n      plugins: {\n        // ...其它插件\n        axios: {}\n      }\n    }\n    ```\n\n    注意: 如果你使用的是 wepy 生成的默认配置, 在文件的最后面有下面这样的代码:\n\n    ```js\n    module.exports.plugin = {\n      uglifyjs: {\n        // ...\n      },\n      imagemin: {\n        // ...\n      }\n    }\n    ```\n\n    在这里也同样要插入一行 `axios: {}`, 否则在生成发布版本时将产生错误\n\n2. 配置 axios\n\n    **从 `wepy-plugin-axios/dist/adapter` 处引入一个用于生成 adapter 的函数,\n    然后向这个函数传入 axios 的实例即可得到一个 adapter**\n\n    利用 `axios.defaults` 或 `axios.create` 来设置 axios 的 `adapter` 属性 (推荐后者)\n\n    ```js\n    import axios from 'axios'\n    import wepyAxiosAdapter from 'wepy-plugin-axios/dist/adapter'\n\n    // adapter 的初始化一定要在任何其它的 axios.create 之前执行\n    const adapter = wepyAxiosAdapter(axios)\n\n    export default axios.create({\n      adapter: adapter      // 此属性为可以在小程序中使用 axios 的关键\n      // ...其它属性\n    })\n    ```\n\n## 用法\n\n下面的例子假定已经根据上面的内容配置完毕\n\n### 发送普通请求\n\n```js\n// 发送普通 GET 请求\naxios.get('https://huajingkun.com/api/userinfo')\n\n// 发送 json 数据\naxios.request({\n  method: 'post',\n  url: 'https://huajingkun.com/api/userinfo',\n  data: {\n    nickname: '233'\n  }\n})\n\n// 发送 urlencoded 数据\naxios.post('https://huajingkun.com/api/userinfo', { nickname: '233' }, {\n  headers: {\n    'content-type': 'application/x-www-form-urlencoded'\n  }\n})\n```\n\n### 上传文件\n\n如果在 POST 请求的数据中出现了 `$upload` 字段，则将此请求视为上传文件请求\n\n```js\naxios.post('https://huajingkun.com/api/avatar', {\n  $upload: {\n    name: 'avatar',\n    filePath: 'wxfile://sometempfilepath'     // 来自 wx.chooseImage 等接口的结果\n  },\n  // ...其它一起发送的数据\n})\n```\n\n### 下载文件\n\n如果在一个 GET 请求中 `responseType` 为 `file`, 则将此请求视为下载文件请求.\n返回**文件的临时路径** (详见[小程序开发文档](https://mp.weixin.qq.com/debug/wxadoc/dev/api/network-file.html#wxdownloadfileobject))\n\n注意: 只有此时可以使用 http 协议\n\n```js\naxios.get('http://www.baidu.com', { responseType: 'file' }).then(response =\u003e {\n  console.log(response.data)    // 输出下载成功的文件的临时路径\n})\n```\n\n## 请求选项\n\n本插件提供了大部分 axios 选项的支持, 同时在原有的 axios API 的基础上进行了一些修改:\n\n### 不支持的选项\n\n注：由于小程序的请求功能有限, 所以不支持以下选项.\n如果使用时出现了以下选项, 将直接忽略.\n不在此列表中的功能均可使用\n\n* `timeout`\n* `withCredentials`\n* `auth`\n* `xsrfCookieName`\n* `xsrfHeaderName`\n* `onUploadProgress`\n* `onDownloadProgress`\n* `maxContentLength`\n* `maxRedirects`\n* `httpAgent`\n* `httpsAgent`\n* `proxy`\n\n### 受限的选项\n\n* `url`: 必须指定协议, 并且只能是 http 或 https. 只有下载文件可以用 http\n* `method`: 只能是小程序支持的方法 (详见[小程序开发文档](https://mp.weixin.qq.com/debug/wxadoc/dev/api/network-request.html))\n* `responseType`: 只能是 `json`, `text`, `file` 中的一个\n\n## 返回内容\n\n返回内容与 axios 返回内容相似:\n\n```js\n{\n  // 服务器发回的响应数据\n  // 对于下载文件请求, data 字段的内容为文件的临时路径\n  data: object | string | any,\n\n  // HTTP 响应码\n  status: number,\n\n  // 服务器返回的 HTTP 头部. 所有的头部名称都为小写\n  // 对于上传或下载请求, headers 字段始终为空对象 (小程序没有提供返回的头部内容)\n  headers: object,\n\n  // axios 所使用的请求选项\n  config: object,\n\n  // 传入 wx.request 或 wx.uploadFile 或 wx.downloadFile 的具体内容\n  request: object\n}\n```\n\n## 注意\n\n由于目前 wepy 的插件系统还不够完善, 所以本插件使用了比较“脏”的方法来让 axios\n可以在 wepy 中使用:\n\n**直接修改 axios 源文件**\n\n在 `lib/plugin.js` 中删除了 axios 源文件 `lib/defaults.js` 中有关 adapters 的定义.\n由于 axios 是同时支持浏览器和 Node.js 的, 但 wepy 在打包时无法忽略 Node.js\n的原生模块, 所以会导致打包失败\n\n但 wepy 的插件目前只能在打包的最后一步中对源文件进行修改, 不能修改依赖关系信息,\n也就无法忽略为 Node.js 准备的代码, 所以只能粗暴地删除它. 浏览器断的代码也顺便删除了,\n因为小程序中不能使用 `XMLHttpRequest`, 必须完全使用自定义的 adapter,\n删除后还可以减小文件体积\n\n这样的修改意味着, 如果你的小程序代码和其它代码共用一个 `node_modules` 文件夹的话,\n其它代码将无法正常使用 axios\n\n## 插件开发与测试\n\n由于目前 wepy 没有 alias 功能, 开发时只能将整个项目文件夹复制到测试项目的\n`node_modules` 文件夹下, 并将 `wepy-plugin-axios/dist/adapter` 改为\n`wepy-plugin-axios/lib/adapter.js`\n\n编译时运行以下命令即可在 `dist` 文件夹得到最终文件:\n\n```bash\nnpm run build\n```\n\n## 许可\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhjkcai%2Fwepy-plugin-axios","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhjkcai%2Fwepy-plugin-axios","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhjkcai%2Fwepy-plugin-axios/lists"}