init
This commit is contained in:
commit
443a41110a
12
package.json
Normal file
12
package.json
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"name": "@abearxiong/query",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"build": ""
|
||||||
|
},
|
||||||
|
"keywords": [],
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"description": ""
|
||||||
|
}
|
34
src/adapter.ts
Normal file
34
src/adapter.ts
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
type AdapterOpts = {
|
||||||
|
url: string;
|
||||||
|
headers?: Record<string, string>;
|
||||||
|
body: Record<string, any>;
|
||||||
|
};
|
||||||
|
export const adapter = async (opts: AdapterOpts) => {
|
||||||
|
return fetch(opts.url, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
Authorization: 'Bearer ' + localStorage.getItem('token'),
|
||||||
|
...opts.headers,
|
||||||
|
},
|
||||||
|
body: JSON.stringify(opts.body),
|
||||||
|
})
|
||||||
|
.then((response) => {
|
||||||
|
// 获取 Content-Type 头部信息
|
||||||
|
const contentType = response.headers.get('Content-Type');
|
||||||
|
// 判断返回的数据类型
|
||||||
|
if (contentType && contentType.includes('application/json')) {
|
||||||
|
return response.json(); // 解析为 JSON
|
||||||
|
} else {
|
||||||
|
return response.text(); // 解析为文本
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
if (err.name === 'AbortError') {
|
||||||
|
console.log('Request timed out and was aborted');
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
code: 500,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
};
|
37
src/index.ts
Normal file
37
src/index.ts
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
import { adapter } from './adapter';
|
||||||
|
|
||||||
|
type Fn = (opts: { url?: string; headers?: Record<string, string>; body?: Record<string, any>; [key: string]: any }) => Promise<Record<string, any>>;
|
||||||
|
type QueryOpts = {
|
||||||
|
url?: string;
|
||||||
|
adapter?: typeof adapter;
|
||||||
|
};
|
||||||
|
export class Query {
|
||||||
|
adapter: typeof adapter;
|
||||||
|
url: string;
|
||||||
|
beforeRequest?: Fn;
|
||||||
|
headers = {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
Authorization: 'Bearer ' + localStorage.getItem('token'),
|
||||||
|
};
|
||||||
|
constructor(opts: QueryOpts) {
|
||||||
|
this.adapter = opts.adapter || adapter;
|
||||||
|
this.url = opts.url || '/api/router';
|
||||||
|
}
|
||||||
|
async get(params: Record<string, any>) {
|
||||||
|
return this.post(params);
|
||||||
|
}
|
||||||
|
async post(body: Record<string, any>) {
|
||||||
|
const req = {
|
||||||
|
url: this.url,
|
||||||
|
headers: this.headers,
|
||||||
|
body,
|
||||||
|
};
|
||||||
|
if (this.beforeRequest) {
|
||||||
|
await this.beforeRequest(req);
|
||||||
|
}
|
||||||
|
return this.adapter(req);
|
||||||
|
}
|
||||||
|
before(fn: Fn) {
|
||||||
|
this.beforeRequest = fn;
|
||||||
|
}
|
||||||
|
}
|
9
test/query.test.ts
Normal file
9
test/query.test.ts
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import { Query } from './../src/index';
|
||||||
|
|
||||||
|
const query = new Query({ url: '/api/router' });
|
||||||
|
|
||||||
|
// test('query', async () => {
|
||||||
|
// query.get({ id: 1 }).then((res) => {
|
||||||
|
// expect(res).toEqual({ id: 1 });
|
||||||
|
// });
|
||||||
|
// }
|
38
tsconfig.json
Normal file
38
tsconfig.json
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "ESNext",
|
||||||
|
"useDefineForClassFields": true,
|
||||||
|
"lib": [
|
||||||
|
"DOM",
|
||||||
|
"DOM.Iterable",
|
||||||
|
"ESNext"
|
||||||
|
],
|
||||||
|
"allowJs": false,
|
||||||
|
"skipLibCheck": true,
|
||||||
|
"esModuleInterop": false,
|
||||||
|
"allowSyntheticDefaultImports": true,
|
||||||
|
"strict": true,
|
||||||
|
"forceConsistentCasingInFileNames": true,
|
||||||
|
"module": "ESNext",
|
||||||
|
"moduleResolution": "Node",
|
||||||
|
"resolveJsonModule": true,
|
||||||
|
"isolatedModules": true,
|
||||||
|
"noEmit": true,
|
||||||
|
"jsx": "react-jsx",
|
||||||
|
"baseUrl": ".",
|
||||||
|
"typeRoots": [
|
||||||
|
"node_modules/@types"
|
||||||
|
],
|
||||||
|
"paths": {
|
||||||
|
"@/*": [
|
||||||
|
"src/*"
|
||||||
|
],
|
||||||
|
"*": [
|
||||||
|
"types/*"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"include": [
|
||||||
|
"src"
|
||||||
|
],
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user