title:
order: 6

category: ICE Design Pro

在前后端分离的开发中,Mock 数据是前端开发中很重要的一个环节,前端可以不必强依赖后端接口,只需要约定好对应的数据接口,前端可以通过 Mock 模拟数据先行开发,在后端接口开发完成后,只需要切换对应的接口地址即可,可以保证项目的同步开发。

在飞冰中,我们提供了完整的 Mock 方案,支持 CRUD 等操作,只需要在项目目录下新建 mock 文件夹,并配置入口文件 index.js 作为路由表的入口,在启动项目服务时工具会同步的启动 Mock 服务。

新建路由表

在项目根目录下创建 projectName/mock/index.js 文件

  1. // mock/index.js
  2. const foo = require('./foo.json');
  3. const bar = require('./bar');
  4. module.exports = {
  5. // 同时支持 GET 和 POST
  6. '/api/users/1': foo,
  7. '/api/foo/bar': bar(),
  8. // 支持标准 HTTP
  9. 'GET /api/users': { users: [1, 2] },
  10. 'DELETE /api/users': { users: [1, 2] },
  11. // 支持自定义函数,API 参考 express4
  12. 'POST /api/users/create': (req, res) => {
  13. res.end('OK');
  14. },
  15. // 支持参数
  16. 'POST /api/users/:id': (req, res) => {
  17. const { id } = req.params;
  18. res.send({ id: id });
  19. },
  20. };

通过 Iceworks 启动项目服务,假设启动的端口是 http://localhost:4444,打开浏览器如下:

Mock 方案 - 图1

实际应用

在模板中我们将服务接口统一维护在 src/api/index.js 中作为入口文件,有利于统一管理和可维护性,然后在需要引用的地方 import { xxx } from '@api' 即可;当然,也可以按照功能模块对接口进行归类:

目录组织:

  1. // 目录组织:
  2. - api
  3. - User.js
  4. - Home.js
  5. - index.js
  1. // User.js
  2. export async function login(params) {
  3. return axios({
  4. url: '/api/login',
  5. method: 'post',
  6. data: params,
  7. });
  8. }
  9. export async function postUserRegister(params) {
  10. return axios({
  11. url: '/api/register',
  12. method: 'post',
  13. data: params,
  14. });
  15. }
  16. export async function postUserLogout() {
  17. return axios({
  18. url: '/api/logout',
  19. method: 'post',
  20. });
  21. }
  22. export async function getUserProfile() {
  23. return axios('/api/profile');
  24. }