# install dependencies $ yarn install # develop library by docs demo $ yarn start # build library source code $ yarn run build # build library source code in watch mode $ yarn run build:watch # build docs $ yarn run docs:build # check your project for potential problems $ yarn run doctorimport { request } from '@bit/request'; import { useEffect, useState } from 'react'; export default () => { const [json, setJson] = useState(null); const [data, setData] = useState(null); const [data1, setPostData] = useState(null); const [data2, setPostFormData] = useState(null); const fetchJson = () => { request .get('/json/languse/test/assetexport/en_US.json') .then((res) => { setJson(JSON.stringify(res)); }); }; const fetchData = () => { request .get('/api/exchange-web/web/activity/getUserLoginStatus', { test: true }) .then((res) => { setData(JSON.stringify(res)); }); }; const postData = () => { request .post('/feapi/fe-co-api/common/public_info', { securityInfo: '', type: '1,2,3', uaTime: new Date(), }) .then((res) => { setPostData(JSON.stringify(res)); }); }; const postFormData = () => { request .post( '/feapi/fe-co-api/common/public_info', { securityInfo: '', type: '1,2,3', uaTime: new Date(), }, { headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8', }, }, ) .then((res) => { setPostFormData(JSON.stringify(res)); }); }; return ( <div> <div> <button onClick={fetchJson}>getJson</button> <b>json:</b> <br /> {json} </div> <br /> <div> <button onClick={fetchData}>getData</button> <b>data:</b> <br /> {data} </div> <br /> <div> <button onClick={postData}>postData</button> <b>data:</b> <br /> {data1} </div> <br /> <div> <button onClick={postFormData}>postFormData</button> <b>data:</b> <br /> {data2} </div> </div> ); };get(url, params, config, options)
post(url, data, config, options)
put(url, config, options)
delete(url, config, options)
upload(url, params, config) 上传 params 中必须包含 file 属性
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| publicParams | 请求携带的公共参数 | Boolean/Object | 见下 publicparams |
| urlPrefix | 请求前缀 | String | '' |
| isReturnNativeResponse | 是否返回原生 response | Boolean | false |
| errorMessageMode | 错误消息提示类型 | 'toast'/'log'/'none' | 'none' |
| ignoreCancelToken | 允许重复请求 | Boolean | false |
| retryRequest | 失败是否重试 | Boolean/Number | true |
浏览器环境登录用户默认携带设备参数
| 参数 | 含义 | 默认值 |
|---|---|---|
| token | token | token_url |
| appName | 浏览器名称 | navigator.appName |
| appCodeName | 浏览器代码名称 | navigator.appCodeName |
| appVersion | 浏览器版本号 | navigator.appVersion |
| userAgent | 浏览器版本信息 | navigator.userAgent |
| cookieEnabled | 浏览器是否启用 cookie | navigator.cookieEnabled |
| platform | 客户端操作系统 | navigator.platform |
| userLanguage | 浏览器语言 | navigator.language |
| vendor | 浏览器厂商 | navigator.vendor |
| onLine | 浏览器是否连接网络 | navigator.onLine |
| product | 浏览器产品名称 | navigator.product |
| productSub | 浏览器产品其他信息 | navigator.productSub |
| mimeTypesLen | 浏览器的 MIME 类型数量 | navigator.mimeTypes.length |
| pluginsLen | 浏览器的插件数量 | navigator.plugins.length |
| javaEnbled | 浏览器是否启用 JAVA | navigator.javaEnabled() |
| windowScreenWidth | 屏幕分辨率 - 宽 | window.screen.width |
| windowScreenHeight | 屏幕分辨率 - 高 | window.screen.width |
| windowColorDepth | 屏幕色彩位数 | window.screen.colorDepth |
request.setRequestHooks() 可以设置自定义 hooks;
| 自定义 hook | trigger | 参数 | 返回值 |
|---|---|---|---|
| beforeRequestHook | request 发起前 | (config, option) => {return config} | 返回最新 config |
| afterRequestHook | response 返回后 | (res, option) => {return res} | 返回最终 res |
import { request } from '@bit/request'; import { useEffect, useState } from 'react'; export default () => { const [hooks, setHooks] = useState(false); const [json, setJson] = useState(null); const fetchJson = () => { request .get('/json/languse/tets/assetexport/en_US.json') .then((res) => { setJson(JSON.stringify(res)); }); }; const setHook = () => { setHooks(true); const beforeRequestHook = (config, options) => { config.cusHook = true; return config; }; const afterRequestHook = (res) => { res.cusHook = true; return res; }; request.setRequestHooks({ beforeRequestHook, afterRequestHook, }); }; return ( <div> <button onClick={setHook}>setCustomeHooks:{`${hooks}`}</button> <div> <button onClick={fetchJson}>getJson</button> <b>json:</b> <br /> {json} </div> </div> ); };统一数据格式 {code:0, data, msg},对于响应数据格式不符合要求的接口,请联系服务端调整接口数据格式,或者通过 transformData 手动更改响应数据
import { request } from '@bit/request'; import { useEffect, useState } from 'react'; export default () => { const [hooks, setHooks] = useState(false); const [json, setJson] = useState(null); const fetchJson = () => { request .get('/json/languse/test/assetexport/en_US.json', null, null, { transformData: (res) => { return { code: 0, data: res, message: 'success', }; }, }) .then((res) => { setJson(JSON.stringify(res)); }) .catch((err) => {}); }; return ( <div> <div> <button onClick={fetchJson}>getJson</button> <b>json:</b> <br /> {json} </div> </div> ); };import { request } from '@bit/request'; import { useRef } from 'react'; export default () => { const fileRef = useRef(); const handleUpload = (e) => { e.preventDefault(); const file = fileRef.current.files[0]; if (file) { request .upload('/api/exchange-web/web/userCenterGoogle/handleFileUpload', { file: file, }) .then((res) => { console.log(res); }); } }; return ( <div> <form enctype="multipart/form-data" onSubmit={handleUpload}> <input type="file" name="myfile" ref={fileRef} /> <input type="submit" /> </form> </div> ); };import { request } from '@bit/request'; import { useEffect, useState } from 'react'; export default () => { const [errorMode, setErrorMode] = useState('none'); const [error, setError] = useState(null); const fetchJson = () => { request .get('/json/languse/test/assetexport/en_US1.json', null, null, { errorMessageMode: errorMode, }) .then((res) => { // ... }) .catch((err) => { setError(err); }); }; const fetchData = () => { request .get('/api/exchange-web/web/activity/notgetUserLoginStatus', null, null, { errorMessageMode: errorMode, }) .then((res) => { // ... }) .catch((err) => { setError(err); }); }; const postData = () => { request .post( '/feapi/fe-co-api/common/public_info1', { securityInfo: '', type: '1,2,3', uaTime: new Date(), }, null, { errorMessageMode: errorMode }, ) .then((res) => { // ... }) .catch((err) => { setError(err); }); }; const switchErrorMode = (mode) => () => setErrorMode(mode); return ( <div> <div> <div>errorMode: {errorMode}</div> <br /> <div>errorStatus: {JSON.stringify(error)}</div> <br /> <button onClick={switchErrorMode('none')}>errorMode:none</button> <button onClick={switchErrorMode('log')}>errorMode:log</button> <button onClick={switchErrorMode('toast')}>errorMode:toast</button> </div> <br /> <div> <button onClick={fetchJson}>getErrorJson</button> </div> <br /> <div> <button onClick={fetchData}>getErrorData</button> </div> <br /> <div> <button onClick={postData}>postErrorData</button> </div> </div> ); };