前端在项目中使用mockjs模拟数据的增删改查

这篇具有很好参考价值的文章主要介绍了前端在项目中使用mockjs模拟数据的增删改查。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

在项目开发时,会存在前端界面已经画好了但是后端接口还在开发的情况,此时前端可以先根据接口文档明确自己需要的字段,然后使用mock模拟后端接口进行调试

安装

npm install mockjs

使用

1. 创建vue项目之后,新建一个mock文件夹,定义一个index.js文件

2. 引入mock依赖,使用setup方法设置请求响应的时间

// index.js

// 导入mockjs 返回一个对象
const Mock = require('mockjs')

// 使用setup配置请求的响应时间,单位是毫秒
Mock.setup({
  // timeout: 1000 // 意味着接口1s后返回
  timeout: '200-1000' // 意味这接口响应时间介于200毫秒-1s之间
})

3. Mock对象中有个mock方法生成响应的数据

// index.js
// 根据Mock.mock方法生成响应的数据
// Mock.mock( rurl请求的url, rtype请求的类型, template数据模板| function( options ) 生成响应数据的函数)
/*
    一般数据模板传递的对象:
    {
        "key|生成规则": 响应的数据
    }
    
    生成的规则
    m-n    生成m到n个
    +n     每生成一次 数值都+1
*/

// 普通的示例
// 请求list接口,返回1-10条之间的数据,返回的结构是{ code: 0, data: [{},{}...]}
Mock.mock('/list', 'get', {
  code: 0,
  ...{ 'data|1-10': [{}] }
})

4. 在main.js中 引入mock文件夹下的index文件

// main.js

...
import '@/mock/index'

 5. 在需要使用接口的地方,用axios请求对应的接口地址即可获取数据

// Home.vue

async mounted () {
  const res = await axios.get('/list')
  console.log(res, 'resres')
}

打印出来的结果

前端在项目中使用mockjs模拟数据的增删改查

常用的数据占位符

下面例举一些项目上常用的数据占位符,能快速随机生成数据结构

使用@string可以生成随机的字符串
@string(length) 可以输入数字指定长度
@string("lower|upper|number|symbol",length)  第一个参数可以指定是字母小写|大写|数字|符号,第二个参数可以输入数字指定长度
@string(min, max)  可以指定字符串的区间
eg:{ 'data|1-10': [{ 'id|+1': 1, name: '@string' }] }


使用@boolean可以生成随机的布尔值 true|false
eg:{ 'data|1-10': [{ 'id|+1': 1, sex: '@boolean' }] }


使用@integer随机生成一串数字
Random.integer( min, max )
eg:{ 'data|1-10': [{ 'id|+1': 1, count: '@integer(1, 20)' }] }


使用@date随机生成日期
@date("yyyy-MM-dd") "2022-11-28"
@date("yy-MM-dd")  22-11-28
eg:{ 'data|1-10': [{ 'id|+1': 1, date: '@date(yyyy-MM-dd)' }] }


使用@time随机生成时分秒
@time("HH:mm:ss") "00:15:29" 常用的是这个格式
eg:{ 'data|1-10': [{ 'id|+1': 1, time: '@time(HH:mm:ss)' }] }


使用@datetime 随机生成具体的日期至时分秒
@datetime("yyyy-MM-dd HH:mm:ss") "2018-11-29 09:25:16" 常用的是这个格式
eg:{ 'data|1-10': [{ 'id|+1': 1, time: '@datetime(yyyy-MM-dd HH:mm:ss)' }] }


使用@image 随机生成具体大小的图片
@image( size?, background?, foreground?, format?, text? )
可以指定图片的尺寸,底色,文案的颜色,图片的格式,图片上的文案展示
eg:{ 'data|1-10': [{ 'id|+1': 1, image: '@image' }] }
eg:{ 'data|1-10': [{ 'id|+1': 1, image: '@image(200x100, #50B347, #fff, hello)' }] }


使用@cparagraph 随机生成段落文案--中文
@cparagraph( min?, max? ) 可以指定生成多少句文案
eg:{ 'data|1-10': [{ 'id|+1': 1, cparagraph: '@cparagraph(2)' }] }


使用@ctitle 随机生成标题--中文
@ctitle( length ) 可以指定标题的长度
@ctitle( min, max ) 可以指定标题的长度的区间
eg:{ 'data|1-10': [{ 'id|+1': 1, title: '@ctitle(10)' }] }


使用@cname 随机生成姓名-中文
eg:{ 'data|1-10': [{ 'id|+1': 1, name: '@cname' }] }


使用@email 随机生成邮箱地址
eg:{ 'data|1-10': [{ 'id|+1': 1, email: '@email' }] }


使用@province 随机生成省份
eg:{ 'data|1-10': [{ 'id|+1': 1, province: '@province' }] }


使用@province 随机生成省份
使用@city 随机生成城市 @city(true) 则会把省份也显示出来
使用@county 随机生成地级  @county(true) 则会把省、市前缀显示出来
eg:{ 'data|1-10': [{ 'id|+1': 1, province: '@province' }] }
eg:{ 'data|1-10': [{ 'id|+1': 1, city: '@city' }] }
eg:{ 'data|1-10': [{ 'id|+1': 1, county: '@county' }] }


使用@pick 随机生成指定的范围数据
eg:{ 'data|1-10': [{ 'id|+1': 1, role: '@pick(["董事长", "总监", "经理", "组长"])' }] }

通过extend可以拓展mockjs的属性

随机生成手机号码

Mock.Random.extend({
  phone () {
    // 自己随便写前缀
    const phonePrefixs = ['135', '189', '136']
    // 使用pick 随机返回前缀
    return this.pick(phonePrefixs) + Mock.mock(/\d{8}/)
  }
})
console.log(Mock.Random.phone())

mockjs的综合使用-----增删改查

模拟获取列表数据 get

// mock/index.js

// 常用的表格数据结构
const list = Mock.mock({
  'data|10': [{ // 生成10条数据
    'id|+1': 1, // id会自增
    name: '@cname', // 随机生成姓名 --中文名
    sex: '@integer(0, 1)', // 性别一般是用数字表示 0男生 1女生
    phone: Mock.Random.phone(), // 拓展mockjs 生成随机的手机号码
    email: '@email', // 随机生成邮箱地址
    account: '@name', // 随机生成账号名 -- 英文
    status: '@boolean', // 随机生成布尔值 表示账户状态
    profile: '@image( 50x50, #FF6600, #fff, png, 头像 )', // 随机生成头像
    createTime: '@datetime(yyyy-MM-dd HH:mm:ss)', // 随机生成创建时间
    role: '@pick(["董事长", "总监", "经理", "组长"])' // 随机生成角色
  }]
})
Mock.mock('/list', 'get', {
  code: 0,
  ...list,
  total: 10
})

在需要获取列表的页面请求接口

async mounted () {
    const res = await axios.get('/list')
    console.log(res, '===>getList')
}

打印查询列表的数据结果

前端在项目中使用mockjs模拟数据的增删改查

模拟根据id查询对应数据 get

// mock/index.js

// 使用响应数据的函数,含有 url、type 和 body 三个属性
// 根据url 获取参数
Mock.mock(/listById/, 'get', ({ url }) => {
  // 获取?后面的参数
  const query = url.split('?')[1]
  // 解析参数
  const queryStr = new URLSearchParams(query)
  const id = queryStr.get('id')
  return {
    code: 0,
    data: list.data.find(item => item.id === Number(id))
  }
})

在需要获取列表的页面请求接口

methods: {
  async getDetailById () {
      const res = await axios.get('listById', { params: { id: 1 } })
      console.log(res, '===>getDetailById')
    }
  }

打印查询的结果

前端在项目中使用mockjs模拟数据的增删改查

模拟增加数据 post

// mock/index.js

// 如果是put | post 的请求 参数是放在了body里面
Mock.mock(/addItem/, 'post', ({ body }) => {
  // 获取请求体的数据
  const { data } = JSON.parse(body)
  // 对一些必填的字段做校验
  const dataTips = {
    name: '名字不能为空',
    sex: '性别不能为空',
    phone: '手机号码不能为空',
    account: '账号不能为空'
  }
  for (const key of Object.keys(dataTips)) {
    if (!data[key]) {
      return { code: 500, message: dataTips[key] }
    }
  }
  return { code: 0, data: '操作成功' }
})

在需要增加数据的的页面请求接口

methods: {
    async addItem () {
        const params = {
            name: 'lily',
            sex: '女'
        }
        const res = await axios.post('/addItem', { data: params })
        console.log(res, '===>addItem')
    }
}

打印的结果

前端在项目中使用mockjs模拟数据的增删改查

methods: {
    async addItem () {
        const params = {
            name: 'lily',
            sex: '女',
            phone: '15915888888',
            account: 'aaa.com'
        }
        const res = await axios.post('/addItem', { data: params })
        console.log(res, '===>addItem')
    }
}

前端在项目中使用mockjs模拟数据的增删改查

模拟根据id删除对应数据 delete

// mock/index.js

Mock.mock(/removeById/, 'delete', ({ url }) => {
  // 获取?后面的参数
  const query = url.split('?')[1]
  // 解析参数
  const queryStr = new URLSearchParams(query)
  const id = queryStr.get('id')
  const index = list.data.findIndex(item => item.id === id)
  list.data.splice(index, 1)
  return {
    code: 0,
    data: '操作成功'
  }
})

在需要删除数据的页面请求接口

methods: {
    async removeItemlById () {
      const res = await axios.delete('/removeById', { params: { id: 1 } })
      console.log(res, '===>removeItemlById')
    }
  }

打印删除的结果

前端在项目中使用mockjs模拟数据的增删改查

模拟根据id修改对应数据  put

// mock/index.js

// 如果是put | post 的请求 参数是放在了body里面
Mock.mock(/updateById/, 'put', ({ body }) => {
  // 格式化body的参数
  const { data } = JSON.parse(body)
  // 找到对应的数据
  const target = list.data.find(item => item.id === data.id)
  if (!target) {
    return { code: 500, message: '查询有误' }
  }
  for (const key in data) {
    target[key] = data[key]
  }
  return { code: 0, data: target }
})

在需要修改数据的页面请求接口

methods: {
    async updatetemlById () {
      const res = await axios.put('/updateById', { data: { id: 1, name: '我是修改的名字', role: '我是修改的role', account: '我是修改的账号' } })
      console.log(res, '===>updatetemlById')
    }
  }

打印修改后的结果

前端在项目中使用mockjs模拟数据的增删改查文章来源地址https://www.toymoban.com/news/detail-400868.html

~~~end~~~

到了这里,关于前端在项目中使用mockjs模拟数据的增删改查的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Django学习记录:使用ORM操作MySQL数据库并完成数据的增删改查

    数据库操作 MySQL数据库+pymysql Django开发操作数据库更简单,内部提供了ORM框架。 安装第三方模块 ORM可以做的事: 1、创建、修改、删除数据库中的表(不用写SQL语句)。【无法创建数据库】 2、操作表中的数据(不用写SQL语句)。 1、自己创建数据库 1)启动MySQL服务 2)自带

    2024年02月14日
    浏览(63)
  • 基于Servlet+JSP的增删改查练手项目

    我们每写一步,就测试一步,不要等到所有都写好了再测试,如果都写好了再测试,最后出错的话,会很崩溃,代码量大,调试就不容易,话不多说,开始今天的练手项目。下面的代码,每一步都是按照我自己的步骤,一步一步敲出来,调试出来的,大家第一遍可以跟着敲代

    2024年02月09日
    浏览(46)
  • vue项目配置MongoDB的增删改查操作

    在Vue中配置MongoDB的增删改查操作,需要先安装`mongoose`模块来连接MongoDB数据库。 1. 在Vue项目的根目录中,使用命令行安装`mongoose`模块:         npm install mongoose --save 2. 找到启动node的app.js文件(我这里是在server文件中,就是第三步中说的server文件) 在上面的代码中,`m

    2024年02月09日
    浏览(44)
  • vue3中mockjs模拟获取数据

    开发项目的时候,如果后端接口没有出来,前端工程师也不必非得等接口出来才进行下步开发。可以使用mock.js来模拟接口数据,以下就是使用vue3设置hook函数来封装axios请求,配合mock.js来实现的代码,mock的官网 Mock.js

    2024年02月20日
    浏览(38)
  • Java(二):Spring Boot 项目-文件的增删改查下载

    docker运行mysql 设置MySQL时区 添加修改 /mysql/conf.d/xxx.cnf 文件,并重启 MySQL 查看当前MySQL使用的时区 MySQL建库建表 数据表实体类 注意: 规定参数时区 com/example/user/entity/FileTable.java 查询条件实体类 com/example/user/entity/FileTableCondition.java com/example/user/utils/FileUtil.java mapper user/src/mai

    2024年02月09日
    浏览(54)
  • MySQL--数据的增删改

    目录  1.添加数据 1.1、添加全部字段的数据 1.2、添加指定字段的部分数据 1.3、同时添加多条记录 1.4、插入查询结果数据  2.修改数据  2.1、更新全部数据 2.2、更新部分数据 3.删除部分数据 3.1、删除部分数据  3.2、删除全部数据 向数据表中的所有字段同时添加数据, 使用

    2024年04月26日
    浏览(29)
  • MySQL:数据的增删改查

    本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主! 也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远! 解决方式:使用 INSERT 语句向表中插入数据。 使用这种语法一次只能向表中插入一条数据。 情况

    2024年02月12日
    浏览(47)
  • 数据库的增删改查(一)

    *注释:在SQL中可以使用\\\"--空格+描述\\\"来表示注释说明 *CRUD即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写 语法: insert [into] table_name              [(column[,column] ...)] values(value_list) [, (value_list)] … 注: *[]:选填 *value_list:value,[,value] ... 示例

    2024年02月08日
    浏览(75)
  • 数据库的增删改查(二)

    关系型数据库的一个重要功能 主要作用是保证数据的完整性,也就是数据的正确性(数据本身是正确的,关联关系也是正确的) 人工检查数据的完整性的工作量非常的大,在数据表定义一些约束,那数据库在写入数据时,帮我们完成这个工作 1.1、约束类型 *NOT NULL -指示某列

    2024年02月08日
    浏览(88)
  • 【数据结构】—— 单链表的增删改查

    ❤️一名热爱Java的大一学生,希望与各位大佬共同学习进步❤️ 🧑个人主页:@周小末天天开心 各位大佬的点赞👍 收藏⭐ 关注✅,是本人学习的最大动力 感谢! 📕该篇文章收录专栏—数据结构 目录 方法重写 重写条件 重写好处 重写演示 单链表 介绍 单链表的增删改查

    2024年02月02日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包