美文网首页
Mock | 数据过家家

Mock | 数据过家家

作者: cemcoe | 来源:发表于2020-03-29 14:30 被阅读0次

按理来说在开发时,前端先从后端请求数据,然后通过一些花里胡哨的技术将数据在页面上进行展示。这是一个很好的流程,但事实往往是前后端并行开发,前端在调页面时后端 API 还没有搞好,总不能干等着吧。这时就需要对数据进行一个模拟了。

没有后端接口的情况很常见,比如想学一项前端网络请求相关的知识,不管是 fetch 还是 ajax,多少会需要一个后端接口,没有数据怎么请求。再比如在网上看到一个前端视频教程,跟着做了之后极大概率会发现后端接口挂了,这时咋办?

对于前端而言,没有接口时还是有很多解决方案的。

最硬核的解决方案是自己写一个后端接口,前后端的逻辑方式还是有很大不同的,这种方案需要花费极大的时间成本和学习成本。同时还有点费力不讨好,就好像是巧妇难为无米之炊,结果巧妇为了解决这个困境开始尝试种起了稻米。当然,前后端都能搞定的全栈还是很厉害的。

再来看最不硬核的方案,那就是在页面里把数据写死,等后端把接口搞好以后再更改。这种方法就有点不科学了,等接口好了之后,前端工作量会激增。


目前来讲 Mock 数据这种方式更好,mockjs 文档有点东西。

现在更加倾向于在线 Mock


目前在B站看一个Vue教程,因为时间等原因,接口挂了,就想着如何模拟一波,从此接口不求人。

最近使用的是 https://www.fastmock.site/

接口

目前模拟了三个接口:

  • /home/multidata
  • /home/data
  • /detail
编辑界面大概长这个样子

不妨用 axios 请求一波看下结果。

const instance = axios.create({
    baseURL: 'https://www.fastmock.site/mock/bd48738678f4bdfdc0639cfd895c7b09/supermall',
    timeout: 5000
})
完美

很好数据请求成功,等到后端接口搞好以后,更改一下 axios 中的 baseURL 就可以无缝连接了。

下面是 /home/multidata 的 mock 文件:

{
  "data": {
    "banner": {
      "context": {},
      "isEnd": true,
      "list": [
        {
          "image": "https://s1.ax1x.com/2020/03/27/GCFqbt.md.jpg"
        },
        {
          "image": "https://s1.ax1x.com/2020/03/27/GCFqbt.md.jpg"
        },
        {
          "image": "https://s1.ax1x.com/2020/03/27/GCFqbt.md.jpg"
        },
        {
          "image": "https://s1.ax1x.com/2020/03/27/GCFqbt.md.jpg"
        }
      ],
      "nextPage": 1
    },
    "dKeyword": {},
    "keywords": {},
    "recommend": {
      "list": [
        {
          "image": "https://tvax4.sinaimg.cn/crop.0.0.480.480.180/005LVEk5ly8fywt6bi1prj30dc0dcju9.jpg",
          "title": "我是title"
        },
        {
          "image": "https://tvax4.sinaimg.cn/crop.0.0.480.480.180/005LVEk5ly8fywt6bi1prj30dc0dcju9.jpg",
          "title": "我是title"
        },
        {
          "image": "https://tvax4.sinaimg.cn/crop.0.0.480.480.180/005LVEk5ly8fywt6bi1prj30dc0dcju9.jpg",
          "title": "我是title"
        },
        {
          "image": "https://tvax4.sinaimg.cn/crop.0.0.480.480.180/005LVEk5ly8fywt6bi1prj30dc0dcju9.jpg",
          "title": "我是title"
        }
      ]
    }
  },
  "returnCode": "SUCCESS",
  "success": true
}

上面的数据比较简单,在开发时还有一种常见的场景就是前端传向后端数据,后端根据前端传回的数据返回对应的结果。简言之,根据入参返回数据。

/home/data 接口中就有对应的需求。

haha.gif

从图中可以看出,流行,新款,精选是整个组件,每个组件对应一个参数,当用户点击时,对应的参数传给后端接口,后端根据传回来的是 pop,news 还是 sell,决定给前端返回什么数据,前端在拿到数据后进行页面展示。

入参sell

附上入参 mock

{
  "code": "0000",
  "data": function({_req, Mock
  }) {
      if(_req.query.type === "pop") {
        return {
        "type": "pop",
        "page": 1,
        "list": [
          {
            "show": {
              "img": "https://tvax4.sinaimg.cn/crop.0.0.480.480.180/005LVEk5ly8fywt6bi1prj30dc0dcju9.jpg"
            },
            "title": "pop 我来凑字数",
            "price": 114,
            "cfav": 66,
            "iid": "cemcoe_1"
          },
          {
            "show": {
              "img": "https://tvax4.sinaimg.cn/crop.0.0.480.480.180/005LVEk5ly8fywt6bi1prj30dc0dcju9.jpg"
            },
            "title": "pop 我来凑字数",
            "price": 114,
            "cfav": 66,
            "iid": "cemcoe_2"
          },
          {
            "show": {
              "img": "https://tvax4.sinaimg.cn/crop.0.0.480.480.180/005LVEk5ly8fywt6bi1prj30dc0dcju9.jpg"
            },
            "title": "pop 我来凑字数",
            "price": 114,
            "cfav": 66,
            "iid": "cemcoe_3"
          },
          {
            "show": {
              "img": "https://tvax4.sinaimg.cn/crop.0.0.480.480.180/005LVEk5ly8fywt6bi1prj30dc0dcju9.jpg"
            },
            "title": "pop 我来凑字数",
            "price": 114,
            "cfav": 66,
            "iid": "cemcoe_4"
          }
        ]
      }
    } else if(_req.query.type === "news") {
      return {
        "type": "news",
        "page": 1,
        "list": [
          {
            "show": {
              "img": "https://upload.jianshu.io/users/upload_avatars/3750332/77e3a7d9-a1a3-43da-9ea0-4728826017ba.jpg?imageMogr2/auto-orient/strip|imageView2/1/w/240/h/240"
            },
            "title": "new 我来凑字数",
            "price": 114,
            "cfav": 66
          },
          {
            "show": {
              "img": "https://upload.jianshu.io/users/upload_avatars/3750332/77e3a7d9-a1a3-43da-9ea0-4728826017ba.jpg?imageMogr2/auto-orient/strip|imageView2/1/w/240/h/240"
            },
            "title": "new 我来凑字数",
            "price": 114,
            "cfav": 66
          },
          {
            "show": {
              "img": "https://upload.jianshu.io/users/upload_avatars/3750332/77e3a7d9-a1a3-43da-9ea0-4728826017ba.jpg?imageMogr2/auto-orient/strip|imageView2/1/w/240/h/240"
            },
            "title": "new 我来凑字数",
            "price": 114,
            "cfav": 66
          },
          {
            "show": {
              "img": "https://upload.jianshu.io/users/upload_avatars/3750332/77e3a7d9-a1a3-43da-9ea0-4728826017ba.jpg?imageMogr2/auto-orient/strip|imageView2/1/w/240/h/240"
            },
            "title": "new 我来凑字数",
            "price": 114,
            "cfav": 66
          }
        ]
      }
    } else if(_req.query.type === "sell")
      return {
      "type": "sell",
      "page": 1,
      "list": [
        {
          "show": {
            "img": "https://tvax4.sinaimg.cn/crop.0.0.480.480.180/005LVEk5ly8fywt6bi1prj30dc0dcju9.jpg"
          },
          "title": "sell 我来凑字数",
          "price": 114,
          "cfav": 66
        },
        {
          "show": {
            "img": "https://tvax4.sinaimg.cn/crop.0.0.480.480.180/005LVEk5ly8fywt6bi1prj30dc0dcju9.jpg"
          },
          "title": "sell 我来凑字数",
          "price": 114,
          "cfav": 66
        },
        {
          "show": {
            "img": "https://tvax4.sinaimg.cn/crop.0.0.480.480.180/005LVEk5ly8fywt6bi1prj30dc0dcju9.jpg"
          },
          "title": "sell 我来凑字数",
          "price": 114,
          "cfav": 66
        },
        {
          "show": {
            "img": "https://tvax4.sinaimg.cn/crop.0.0.480.480.180/005LVEk5ly8fywt6bi1prj30dc0dcju9.jpg"
          },
          "title": "sell 我来凑字数",
          "price": 114,
          "cfav": 66
        }
      ]
    }
  },
  "desc": "成功"
}

上面展示的是一些简单的模拟,只涉及了 "GET" 操作,Mock.js 语法没有用到太多,主要是我还没有看怎么写抽空看一下 Mock.js。

相关文章

  • Mock | 数据过家家

    按理来说在开发时,前端先从后端请求数据,然后通过一些花里胡哨的技术将数据在页面上进行展示。这是一个很好的流程,但事...

  • mock数据

    Vue中的mock数据指的是什么? mock数据指的模拟数据,mock中文翻译愚弄,嘲笑。 实现mock数据如下:...

  • 使用 Mockjs 模拟数据

    Mock 数据 Mock 在 vue 中的使用 使用npm下载mock 2.使用 mock 在 mock 文件夹下...

  • mock.js深入

    1.Mock.mock( template )根据数据模板生成模拟数据。(具体语法见mock.js入门) 2.Mo...

  • 利用node.js来mock数据

    1.什么是mock数据? 模拟后端数据 2.mock数据解决的问题 使用mock数据可以在后端开发人员尚未完成接口...

  • Easy Mock&Ajax请求数据

    mock网站https://www.easy-mock.com/login mock数据 axios 封装了所有的...

  • Contacts(TableViewController)报错总

    1. mock网络问题 问题:mock网络的JSON数据无法获取 提示:mock请求出错:mock....777...

  • mock

    mock使用优势:前后端同时开发的时候,后端接口数据没有出来,前端可以mock假数据,模拟开发 1,安装mock依...

  • mockjs-async 修改Mock.mock方法使支持Pro

    Mock.js - async version 仅修改Mock.mock方法使支持Promise异步数据替换 安装...

  • antd pro 使用mock

    在mock文件下创建mock数据 修改代理文件 修改package.json,添加mock环境 yarn star...

网友评论

      本文标题:Mock | 数据过家家

      本文链接:https://www.haomeiwen.com/subject/fjgyuhtx.html