如何通过Mock.js模拟后台数据

发表于:2021-7-15 10:08

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:feelonewong    来源:掘金

#
Mock
  前言:
  前端写完静态页面以后后端接口数据还没有完成,前端需要自己手动调试,因为这时候就需要我们本地模拟一下假数据,以方便我们在后端联调的时候节省一下工作量
  那模拟数据的方式有很多种,例如EasyMock、Hapi等在线平台模拟数据,但是这些在线平台模拟数据在我看来可能有两个缺陷:1.可能由于人数访问过多的原因导致平台经常宕机 2.数据其实等同于JSON字符串,这个JSON也是我们本地大量复制上去的,所以从本质上并没有减轻我们偷懒的习惯。
  所以我们接下来介绍一下我是如何通过Mock.js是如何假数据的。
  前置知识
  · Mock.js
  · Express
  · fetch
  因为安装过程较为简单,这里我就默认你已经会安装Mock.js,Express了。这里即使不会node相关知识也没关系,因为演示代码和JavaScript类似都比较简单通俗易懂。
  后端代码
  下面是主要代码:
  const Mock = require("mockjs");
  const express = require("express");
  const app = express();
  //根据传入的数量,生成num条模拟的数据列表
  function generatorList(num) {
    return Mock.mock({
      [`list|${num}`]: [
        {
          //模拟(自增)id,作为唯一标识符
          "id|+1": 1,
          //@ctitle表示模拟随机中文字符,(15,25)表示字符串长度范围
          title: `@ctitle(15,25)`,
          //@naural模拟生成索引,(0,15)表示生成的数字大小
          image: `@natural(0,15)`,
          //from这个字段,模拟生成的中文字符3~7位
          from: `@ctitle(3,7)`,
          //data模拟日期格式
          data: `@date('yyyy-MM-dd')`,
        },
      ],
    });
  }
  //允许请求的方式:
  app.all("*", (req, res, next) => {
    res.header("Access-Control-Allow-Origin", `*`);
    res.header("Access-Control-Allow-Methods", `PUT,GET,POST,DELETE,OPTIONS`);
    res.header("Access-Control-Allow-Headers", `X-Requested-With`);
    res.header("Access-Control-Allow-Headers", `Content-Type`);
    next();
  });
  //路由GET请求,返回数据
  app.get("/data", (req, res) => {
    //获取get请求的条数
    const { num } = req.query;
    //返回模拟好的数据
    return res.send(generatorList(num));
  });
  //路由器POST请求返回数据
  app.get("/postData",(req, res)=>{
      //因为POST的使用和GET类似,详细请参考GET请求
  })
  //设置端口并且打印对应调用结果
  app.listen(3040, () => {
    console.log(`Open your browser to visit http://localhost:3040/data?num=xxx`);
  });
  程序跑起来的状态:
  前端代码
  (使用useEffect)前端请求的代码:
    useEffect(() => {
          const fetchData = async () => {
              let url = `http://localhost:3040/data?num=20`
              const response = await fetch(url);
              const data = await response.json();
              console.log("模拟请求的数据为20条:", data);
          };
          fetchData();
      }, []);
  总结
  · 解决了EasyMock平台经常宕机数据无法访问的缺陷。
  · 节省了大量复制粘贴的工作,我只要通过本地设置num的值就可以获取我想要得到的数据条数。
  最终结果

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号