视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
MockJs结合json-server模拟后台数据
2020-11-27 21:53:28 责编:小OO
文档


本文实例为大家分享了MockJs结合json-server模拟后台数据的具体代码,供大家参考,具体内容如下

说明

Mock.js 是一款模拟数据生成器,可以根据模板生成数据、模拟网络请求,返回模拟数据等
更多细节参考

官网
示例

1. 安装

下载

mkdir moke-test
cd moke-test
npm init
sudo npm install --save-dev json-server mockjs ip
mkdir server #创建本地服务文件夹

2. 配置 json-server

在 moke-test/server 下创建 index.js

// index.js
const path = require('path');
const jsonServer = require('json-server');
const ip = require('ip').address();
const DB = require('./db.js');
const server = jsonServer.create();
const router = jsonServer.router(DB()); // 将所创建的数据对象传入,以之生成相应的路由
const middlewares = jsonServer.defaults();

 server.use(jsonServer.bodyParser);
 server.use(middlewares);

 server.use(router);

 server.listen({
 host: ip,
 port: 3122
 }, function() {
 console.log(`JSON Server is running in http://${ip}:3122`);
 });

在相同目录下(moke-test/server)下创建 db.js 文件用于通过 mockjs 生成数据

 // mock.js
 const Mock = require('mockjs');
 const Random = Mock.Random;

 module.exports = function () {
 const data = Mock.mock({
 'id|+1': 0
 });

 return {data};
 }

3. 使用 mockjs 动态生成假数据

生成假数据有两种方式

数据模板定义
数据占位符定义

1. 数据模板定义

基本结构如下,详情可以查看官网

 Mock.mock({
 'name|rule': value
 })
 /*
 name: 属性名
 rule: 生成规则
 value: 属性值
 */

2. 数据占位符定义

占位符只是在属性值字符串中占个位置,并不出现在最终的属性值中

1)、用 @ 来标识其后的字符串是占位符,占位符之间空格隔开
2)、占位符是 Mock.Random 中的方法
3)、使用 Mock.Random.extend() 扩展占位符
4)、占位符 也可以引用 数据模板 中的属性,并且优先使用。

Mock.mock({
 'list|5': [{
 first: '@FIRST', // 可以是大写的
 }]
 })

3. Mock.Random 工具类详解

 // mock.js
 const Mock = require('mockjs');
 const Random = Mock.Random;

 module.exports = function () {
 // Random.extend 用于自定义扩展 
 Random.extend({
 courses: ['音乐课', '舞蹈课', '地理课'],
 course: function(date){
 return this.pick(this.courses)
 }
 });

 const courses = Mock.mock({
 startClass: '@bool', // 布尔值,可以传入参数设置频率
 token: '@string("upper", 2, 8)', // 随机字符串
 createData: '@datetime("yyyy-MM-dd A HH:mm:ss")', // 返回日期
 image: '@image("200x100")', // 模拟图片 'x'链接 
 manager: '@cname', // 中文名
 'partners|3': [
 '@name' // 英文名
 ], 
 website: '@url',
 email: '@email',
 'password|2': '**', // 数据模板下,值为字符串表示按照规则重复字符串
 'contents|1-20': [{ // 数据模板下,值为数组或者对象 rule 部分都规定了显示的元素数量
 'id|+1': 0, // 数据模板下,值为数值表示初始值或者底数(按招规则细分)
 courseType: '@COURSE ', // 使用扩展
 courseName() { // 值可以是一个函数,用来细致模拟数据
 return this.courseType + ' ' + Random.natural(1, 10) + '班'
 },
 name: '@courseType @natural(1, 10) 班', // 可以同时使用多个占位符,用空格隔开
 'teacher': '@cname',
 position: '@courseType 第 @id 教室', // 引用当前数据模板中的内容
 students: /\d{5,10}/, // 使用正则规定数据格式
 classTime: '@datetime("M月d日起 每周三 HH:mm")'
 }]
 })

 return {courses};
 }

下载本文
显示全文
专题