From 22bcefcb97e50400403b131d307c97eb4cbb6071 Mon Sep 17 00:00:00 2001 From: zjx0905 <954270063@qq.com> Date: Fri, 14 Apr 2023 18:16:39 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=20HTTP=20PATCH=20?= =?UTF-8?q?=E8=AF=B7=E6=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/.vitepress/config.ts | 1 + docs/pages/basics/patch.md | 80 ++++++++++++++++++++++++++++++++ docs/pages/basics/put.md | 2 +- docs/tsconfig.json | 3 +- src/adapter.ts | 12 +---- src/core/Axios.ts | 1 + src/core/AxiosDomain.ts | 7 ++- src/core/flattenHeaders.ts | 1 + src/defaults.ts | 1 + test/core/Axios.test.ts | 2 +- test/core/AxiosDomain.test.ts | 2 +- test/core/flattenHeaders.test.ts | 37 ++------------- tsconfig.json | 5 +- 13 files changed, 101 insertions(+), 53 deletions(-) create mode 100644 docs/pages/basics/patch.md diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 29f4763..1ba6625 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -34,6 +34,7 @@ export default defineConfig({ { text: 'HEAD 请求', link: '/basics/head' }, { text: 'POST 请求', link: '/basics/post' }, { text: 'PUT 请求', link: '/basics/put' }, + { text: 'PATCH 请求', link: '/basics/patch' }, { text: 'DELETE 请求', link: '/basics/delete' }, { text: 'TRACE 请求', link: '/basics/trace' }, { text: 'CONNECT 请求', link: '/basics/connect' }, diff --git a/docs/pages/basics/patch.md b/docs/pages/basics/patch.md new file mode 100644 index 0000000..f228755 --- /dev/null +++ b/docs/pages/basics/patch.md @@ -0,0 +1,80 @@ +--- +title: PATCH 请求 +--- + +# {{ $frontmatter.title }} + +::: tip {{ $frontmatter.title }} +在 HTTP 协议中,请求方法 PATCH 用于对资源进行部分修改。 + +在 HTTP 协议中, PUT 方法已经被用来表示对资源进行整体覆盖,而 POST 方法则没有对标准的补丁格式的提供支持。不同于 PUT 方法,而与 POST 方法类似,PATCH 方法是非幂等的,这就意味着连续多个相同的请求会产生不同的效果。 +::: + +## 普通的 `PATCH` 请求 + +您可以传入第一个参数 `url` 发送 `PATCH` 请求。 + +```ts +import axios from 'axios-miniprogram'; + +axios + .patch('https://api.com/test') + .then((response) => { + // 成功之后做些什么 + }) + .catch((error) => { + // 失败之后做些什么 + }); +``` + +## 携带数据的 `PATCH` 请求 + +您也可以额外传入第二个参数 `data` 发送携带数据的 `PATCH` 请求。 + +```ts +import axios from 'axios-miniprogram'; + +axios + .patch('https://api.com/test/:id', { + id: 1, + name: 'test', + }) + .then((response) => { + // 成功之后做些什么 + }) + .catch((error) => { + // 失败之后做些什么 + }); +``` + +## 携带自定义配置的 `PATCH` 请求 + +您也可以额外传入第三个参数 `config` 发送携带自定义配置的 `PATCH` 请求。 + +```ts +import axios from 'axios-miniprogram'; + +axios + .patch( + 'https://api.com/test/:id', + { + id: 1, + name: 'test', + }, + { + headers: { + 'Content-Type': 'application/json', + }, + }, + ) + .then((response) => { + // 成功之后做些什么 + }) + .catch((error) => { + // 失败之后做些什么 + }); +``` + +## 兼容性 + + diff --git a/docs/pages/basics/put.md b/docs/pages/basics/put.md index 010b7c6..4eed965 100644 --- a/docs/pages/basics/put.md +++ b/docs/pages/basics/put.md @@ -55,7 +55,7 @@ import axios from 'axios-miniprogram'; axios .put( - 'https://api.com/test/id', + 'https://api.com/test/:id', { id: 1, name: 'test', diff --git a/docs/tsconfig.json b/docs/tsconfig.json index 252f319..ef54345 100644 --- a/docs/tsconfig.json +++ b/docs/tsconfig.json @@ -15,8 +15,7 @@ "noUnusedLocals": true, "strictNullChecks": true, "isolatedModules": true, - "forceConsistentCasingInFileNames": true, - "types": ["vitepress"] + "forceConsistentCasingInFileNames": true }, "include": [ "./.vitepress/**/*.ts", diff --git a/src/adapter.ts b/src/adapter.ts index ac3ccb4..427b814 100644 --- a/src/adapter.ts +++ b/src/adapter.ts @@ -20,6 +20,7 @@ export type AxiosAdapterRequestMethod = | 'HEAD' | 'POST' | 'PUT' + | 'PATCH' | 'DELETE' | 'TRACE' | 'CONNECT'; @@ -61,16 +62,7 @@ export interface AxiosAdapterResponseError extends AnyObject { /** * 错误数据 */ - data?: { - /** - * 错误信息 - */ - errMsg: string; - /** - * Errno错误码 - */ - errno: number; - }; + data?: AnyObject; } export interface AxiosAdapterRequestConfig extends AnyObject { diff --git a/src/core/Axios.ts b/src/core/Axios.ts index e9d35e3..2fe0193 100644 --- a/src/core/Axios.ts +++ b/src/core/Axios.ts @@ -25,6 +25,7 @@ export type AxiosRequestMethod = | 'head' | 'post' | 'put' + | 'patch' | 'delete' | 'trace' | 'connect'; diff --git a/src/core/AxiosDomain.ts b/src/core/AxiosDomain.ts index 43705b6..752d7e1 100644 --- a/src/core/AxiosDomain.ts +++ b/src/core/AxiosDomain.ts @@ -88,7 +88,7 @@ export default class AxiosDomain { /** * 带请求数据的请求别名 */ - static asd = ['post', 'put'] as const; + static asd = ['post', 'put', 'patch'] as const; /** * 默认请求配置 @@ -125,6 +125,11 @@ export default class AxiosDomain { */ put!: AxiosDomainAsRequestWithData; + /** + * 发送 patch 请求 + */ + patch!: AxiosDomainAsRequestWithData; + /** * 发送 delete 请求 */ diff --git a/src/core/flattenHeaders.ts b/src/core/flattenHeaders.ts index bbf8abe..66ae3dd 100644 --- a/src/core/flattenHeaders.ts +++ b/src/core/flattenHeaders.ts @@ -20,6 +20,7 @@ export function flattenHeaders( 'head', 'post', 'put', + 'patch', 'delete', 'trace', 'connect', diff --git a/src/defaults.ts b/src/defaults.ts index 6a2bc5e..3e91d9c 100644 --- a/src/defaults.ts +++ b/src/defaults.ts @@ -12,6 +12,7 @@ const defaults: AxiosInstanceDefaults = { head: {}, post: {}, put: {}, + patch: {}, delete: {}, trace: {}, connect: {}, diff --git a/test/core/Axios.test.ts b/test/core/Axios.test.ts index 066f485..ae6cebe 100644 --- a/test/core/Axios.test.ts +++ b/test/core/Axios.test.ts @@ -18,7 +18,7 @@ describe('src/core/Axios.ts', () => { test('应该有这些静态属性', () => { expect(Axios.as).toEqual(['options', 'trace', 'connect']); expect(Axios.asp).toEqual(['head', 'get', 'delete']); - expect(Axios.asd).toEqual(['post', 'put']); + expect(Axios.asd).toEqual(['post', 'put', 'patch']); }); test('应该有这些实例属性及方法', () => { diff --git a/test/core/AxiosDomain.test.ts b/test/core/AxiosDomain.test.ts index 9598463..efeeba6 100644 --- a/test/core/AxiosDomain.test.ts +++ b/test/core/AxiosDomain.test.ts @@ -7,7 +7,7 @@ describe('src/core/AxiosDomain.ts', () => { test('应该有这些静态属性', () => { expect(AxiosDomain.as).toEqual(['options', 'trace', 'connect']); expect(AxiosDomain.asp).toEqual(['head', 'get', 'delete']); - expect(AxiosDomain.asd).toEqual(['post', 'put']); + expect(AxiosDomain.asd).toEqual(['post', 'put', 'patch']); }); test('应该有这些实例属性', () => { diff --git a/test/core/flattenHeaders.test.ts b/test/core/flattenHeaders.test.ts index 5c0d07d..bc7f9df 100644 --- a/test/core/flattenHeaders.test.ts +++ b/test/core/flattenHeaders.test.ts @@ -4,40 +4,9 @@ import Axios from '@/core/Axios'; describe('src/core/flattenHeaders.ts', () => { const keys = [...Axios.as, ...Axios.asp, ...Axios.asd]; - const baseHeaders = { - options: { - v1: 'options1', - v2: 'options2', - }, - trace: { - v1: 'trace1', - v2: 'trace2', - }, - connect: { - v1: 'connect1', - v2: 'connect2', - }, - head: { - v1: 'head1', - v2: 'head2', - }, - get: { - v1: 'get1', - v2: 'get2', - }, - delete: { - v1: 'delete1', - v2: 'delete2', - }, - post: { - v1: 'post1', - v2: 'post2', - }, - put: { - v1: 'put1', - v2: 'put2', - }, - }; + const baseHeaders = Object.fromEntries( + keys.map((k) => [k, { v1: `${k}1`, v2: `${k}2` }]), + ) as unknown as Record<(typeof keys)[number], AnyObject>; test('应该支持空配置', () => { expect(flattenHeaders({})).toBeUndefined(); diff --git a/tsconfig.json b/tsconfig.json index 1881609..457e5cf 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,9 +12,8 @@ "skipDefaultLibCheck": true, "paths": { "@/*": ["src/*"] - }, - "types": ["vitest", "vitest/globals"] + } }, - "include": ["./src", "./global.d.ts", "./global.variables.d.ts"], + "include": ["./src", "./test", "./global.d.ts", "./global.variables.d.ts"], "exclude": ["node_modules", "**/*.md", "**/dist"] }