Skip to content

Commit 98c1b0c

Browse files
authored
feat: support fetch in wxapp (#86)
* feat: support fetch in wxapp * chore: update yarn.lock
1 parent 4d39883 commit 98c1b0c

File tree

6 files changed

+103
-1
lines changed

6 files changed

+103
-1
lines changed

packages/eslint-config/index.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,8 @@ module.exports = {
2525
rules: {
2626
"prettier/prettier": "error",
2727
},
28+
29+
globals: {
30+
wx: true,
31+
},
2832
};

packages/fetch/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@
2828
"decode-uri-component": "^0.2.0",
2929
"http-errors": "^1.7.1",
3030
"lodash": "^4.17.11",
31-
"node-fetch": "^2.2.0"
31+
"node-fetch": "^2.2.0",
32+
"wxapp-http": "^3.1.0"
3233
},
3334
"devDependencies": {
3435
"fetch-mock": "^7.0.0-alpha.6"

packages/fetch/src/browser.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,11 @@
11
import wrapper from "./wrapper";
2+
import wxFetch from "./wxapp-fetch";
3+
4+
if (!window && wx) {
5+
global.fetch = wxFetch;
6+
global.Response = wxFetch.Response;
7+
global.Headers = wxFetch.Headers;
8+
global.Request = wxFetch.Request;
9+
}
10+
211
export default wrapper;

packages/fetch/src/wrapper.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ export default async function(url, opt = {}) {
2626
...headers,
2727
};
2828

29+
const fetch = (global && global.fetch) || (window && window.fetch);
30+
2931
const res = await fetch(endpoint, {
3032
...opt,
3133
body,

packages/fetch/src/wxapp-fetch.js

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
import http from "wxapp-http";
2+
3+
const httpClient = http.create({
4+
maxConcurrent: 10,
5+
timeout: 0,
6+
header: {},
7+
dataType: "json",
8+
});
9+
10+
function generateResponse(res) {
11+
let header = res.header || {};
12+
let config = res.config || {};
13+
return {
14+
ok: ((res.statusCode / 200) | 0) === 1, // 200-299
15+
status: res.statusCode,
16+
statusText: res.errMsg,
17+
url: config.url,
18+
clone: () => generateResponse(res),
19+
text: () =>
20+
Promise.resolve(
21+
typeof res.data === "string" ? res.data : JSON.stringify(res.data)
22+
),
23+
json: () => {
24+
if (typeof res.data === "object") return Promise.resolve(res.data);
25+
let json = {};
26+
try {
27+
json = JSON.parse(res.data);
28+
} catch (err) {
29+
console.error(err);
30+
}
31+
return json;
32+
},
33+
blob: () => Promise.resolve(new Blob([res.data])),
34+
headers: {
35+
keys: () => Object.keys(header),
36+
entries: () => {
37+
let all = [];
38+
for (let key in header) {
39+
if (header.hasOwnProperty(key)) {
40+
all.push([key, header[key]]);
41+
}
42+
}
43+
return all;
44+
},
45+
get: n => {
46+
const key = Object.keys(header).find(
47+
key => key.toLowerCase() === n.toLowerCase()
48+
);
49+
return header[key];
50+
},
51+
has: n =>
52+
!!Object.keys(header).find(
53+
key => key.toLowerCase() === n.toLowerCase()
54+
),
55+
forEach: fn => {
56+
for (let key in header) {
57+
if (header.hasOwnProperty(key)) {
58+
fn([header[key], key]);
59+
}
60+
}
61+
},
62+
},
63+
};
64+
}
65+
66+
export default (typeof fetch === "function"
67+
? fetch.bind()
68+
: function(url, options) {
69+
options = options || {};
70+
return httpClient
71+
.request(options.method || "get", url, options.body, options.headers)
72+
.then(res => Promise.resolve(generateResponse(res)))
73+
.catch(res => Promise.reject(generateResponse(res)));
74+
});

yarn.lock

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@
4242
resolved "https://registry.yarnpkg.com/@ant-design/icons/-/icons-2.0.0.tgz#f9b8b16e188ec71ed40a24a0037f1a26d8c2be59"
4343
integrity sha512-N4h0v9TbAkzobiDrPNF5LMLbBoR+VdlXJX7RFbZS33lar6Pff37wIF1xJHzTYSZZmE6THSYGmSlEsHQJHx0pJg==
4444

45+
"@axetroy/event-emitter.js@^1.2.4":
46+
version "1.2.4"
47+
resolved "https://registry.yarnpkg.com/@axetroy/event-emitter.js/-/event-emitter.js-1.2.4.tgz#6366444b146ad56a035799d3baf0fe0a8812dcaa"
48+
integrity sha1-Y2ZESxRq1WoDV5nTuvD+CogS3Ko=
49+
4550
"@babel/code-frame@7.0.0", "@babel/code-frame@^7.0.0":
4651
version "7.0.0"
4752
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8"
@@ -20443,6 +20448,13 @@ ws@^6.1.2:
2044320448
dependencies:
2044420449
async-limiter "~1.0.0"
2044520450

20451+
wxapp-http@^3.1.0:
20452+
version "3.1.0"
20453+
resolved "https://registry.yarnpkg.com/wxapp-http/-/wxapp-http-3.1.0.tgz#c7401f546a53b1d20ace771cdd2868f95bc972cd"
20454+
integrity sha512-Ce5FrTRcfl1CKzx23YbOBXAnFSZ5DKMaEySqDJR38cFA5ZXMZuE77+9yZT1ARFl+JwBOAOYapwyXE5Yxp9aXjA==
20455+
dependencies:
20456+
"@axetroy/event-emitter.js" "^1.2.4"
20457+
2044620458
x-is-string@^0.1.0:
2044720459
version "0.1.0"
2044820460
resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82"

0 commit comments

Comments
 (0)