umi 里约定 mock 文件夹下的文件即 mock 文件,文件导出接口定义,支持基于 require
动态分析的实时刷新,支持 ES6 语法,以及友好的出错提示,详情参看 umijs.org。html
export default { // 支持值为 Object 和 Array 'GET /api/users': { users: [1, 2] }, // GET POST 可省略 '/api/users/1': { id: 1 }, // 支持自定义函数,API 参考 express@4 'POST /api/users/create': (req, res) => { res.end('OK'); }, };
当客户端(浏览器)发送请求,如:GET /api/users
,那么本地启动的 umi dev
会跟此配置文件匹配请求路径以及方法,若是匹配到了,就会将请求经过配置处理,就能够像样例同样,你能够直接返回数据,也能够经过函数处理以及重定向到另外一个服务器。git
好比定义以下映射规则:github
'GET /api/currentUser': { name: 'momo.zxy', avatar: imgMap.user, userid: '00000001', notifyCount: 12, },
访问的本地 /api/currentUser
接口:express
请求头npm
返回的数据c#
Mock.js 是经常使用的辅助生成模拟数据的第三方库,固然你能够用你喜欢的任意库来结合 umi 构建数据模拟功能。api
import mockjs from 'mockjs'; export default { // 使用 mockjs 等三方库 'GET /api/tags': mockjs.mock({ 'list|100': [{ name: '@city', 'value|1-100': 50, 'type|0-2': 1 }], }), };
设置 response
的请求头便可:跨域
'POST /api/users/create': (req, res) => { ... res.setHeader('Access-Control-Allow-Origin', '*'); ... },
对于整个系统来讲,请求接口是复杂而且繁多的,为了处理大量模拟请求的场景,咱们一般把每个数据模型抽象成一个文件,统一放在 mock
的文件夹中,而后他们会自动被引入。浏览器
为了更加真实地模拟网络数据请求,每每须要模拟网络延迟时间。服务器
你能够重写请求的代理方法,在其中添加模拟延迟的处理,如:
'POST /api/forms': (req, res) => { setTimeout(() => { res.send('Ok'); }, 1000); },
上面的方法虽然简便,可是当你须要添加全部的请求延迟的时候,可能就麻烦了,不过能够经过第三方插件来简化这个问题,如:roadhog-api-doc#delay。
import { delay } from 'roadhog-api-doc'; const proxy = { 'GET /api/project/notice': getNotice, 'GET /api/activities': getActivities, 'GET /api/rule': getRule, 'GET /api/tags': mockjs.mock({ 'list|100': [{ name: '@city', 'value|1-100': 50, 'type|0-2': 1 }] }), 'GET /api/fake_list': getFakeList, 'GET /api/fake_chart_data': getFakeChartData, 'GET /api/profile/basic': getProfileBasicData, 'GET /api/profile/advanced': getProfileAdvancedData, 'POST /api/register': (req, res) => { res.send({ status: 'ok' }); }, 'GET /api/notices': getNotices, }; // 调用 delay 函数,统一处理 export default delay(proxy, 1000);
当本地开发完毕以后,若是服务器的接口知足以前的约定,那么只须要关闭 mock 数据或者代理到服务端的真实接口地址便可。
npm run start:no-mock