Carmineprince's Blog
首页
    • HTML
    • CSS
    • JavaScript
    • Vue
    • React
    • TypeScript
    • Node
    • Flutter
    • Electron
    • Python
    • 运维
    • 重学前端
  • 分类
  • 标签
  • 归档

Ziqi Wang

胡思乱想程序员
首页
    • HTML
    • CSS
    • JavaScript
    • Vue
    • React
    • TypeScript
    • Node
    • Flutter
    • Electron
    • Python
    • 运维
    • 重学前端
  • 分类
  • 标签
  • 归档
  • 从0开始搭建一套规范的Vue3.x项目工程环境
  • 解决vite构建vue3项目报错
  • 解决Vue3中无法使用$ref的问题
  • 项目中手动增加scss支持
  • el-table多选分页保留
  • 解决npm run dev启动两个页面问题
  • PC端和移动端兼容方案
  • SFC-Use-script-setup
  • vue2x面试前回炉重造
  • Vue3+Vite2配置
  • flvjs+vue 视频播放(手动追帧、断开重连、多个视频同时直播)
  • vue平滑滚动到指定位置
  • vant项目使用postcss-pxtorem和amfe-flexible 进行移动端适配
  • vue 使用v-html绑定时,内部元素不会继承外部css的解决方案
  • vue-awesome-swiper缩略图控制循环无效解决方案
  • 如何在Vue项目中优雅的使用svg图标
  • yarn报错及解决方案
  • vue3+ts+vite移动端vw适配方案
  • Vue项目中增加mockjs模拟接口请求
    • Vue项目中增加mockjs模拟接口请求
      • 1.安装mockjs
      • 2.创建/src/mock/index.js
      • 3.在vue.config.js中配置开发服务器
      • 4.在封装的request.js中配置baseUrl
      • 5.在uni-app项目中使用mockjs
    • 在uni-app项目中app端使用json-server+mockjs实现模拟接口数据
      • json-server介绍
      • 1. 在项目中安装json-server
      • 2. 在项目中创建json-server文件夹
      • 3. server.js
      • 4./modules/alarm.js
      • 5. db.js
      • 6. routes.js
      • 7. 最后在package.json中增加运行
      • 8. 启动服务
      • 9. 手机端真机调试
    • 记录未来可能遇到的问题
  • Nuxt相关

  • Vue3思考及跟Vue2相比的新变化总结
  • Vue相关
carmineprince
2022-01-05

Vue项目中增加mockjs模拟接口请求

# Vue项目中增加mockjs模拟接口请求

# 1.安装mockjs

npm install mockjs
yarn add mockjs
1
2

# 2.创建/src/mock/index.js

const Mock = require('mockjs')
/*  
	/mock/api/alarm/getAlarmStatistics  请求路径
	req 请求对象
	res 响应对象
	json() 将对象转换为json字符串,响应给浏览器
*/
module.exports = function(app) {
    // 获取警报统计信息
    app.use('/mock/api/alarm/getAlarmStatistics', (req, res) => {
        var data = Mock.mock({
            code: 200,
            data: {
                todayCount: '@integer(0,10)',
                historyCount: '@integer(60,100)'
            },
            msg: '成功'
        })

        res.send(data)
    })
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# 3.在vue.config.js中配置开发服务器

module.exports = {
	devServer: {
		before: require('./mock/index.js')
	}
}
1
2
3
4
5

# 4.在封装的request.js中配置baseUrl

我的习惯是配置baseUrl:'/mock',然后在/src/mock/index.js中每个接口前加上/mock。这样很好的区分开了模拟接口和真实接口,当后端给到真实接口直接修改一下baseUrl就可以联调了。

# 5.在uni-app项目中使用mockjs

平台 是否可用
H5 √
安卓 ×
ios ×
微信小程序 未知

原因是mockjs的源码中使用了window等api,在app端无法运行,因此不能使用mockjs,目前还没有寻找app端的mock替代方案。

# 在uni-app项目中app端使用json-server+mockjs实现模拟接口数据

之前没有解决uni-app开发app没办法使用mock模拟请求的办法,最近想到可以使用json-server进行模拟

# json-server介绍

官方的介绍语是,不需要任何代码,30秒就可以生成模拟REST API接口。确实如官网介绍所说,利用json数据模拟数据库,自动生成api这种形式对于简单模拟十分的方便。我这里用到的是cli的方式,其他方式不再赘述。 json-server Github (opens new window)

# 1. 在项目中安装json-server

npm install json-server
yarn add json-server
1
2

# 2. 在项目中创建json-server文件夹

├─json-server
│  └─modules        # 基础数据
│     └─alarm.js    # js形式生成数据,也可以在这里引入mock生成动态数据
│  ├─db.js          # 接入数据,数据的接口,从modules中取出数据
│  ├─routes.js      # 路由转换,因为json-server是固定的默认路由,如果需要特定的api接口配置需要映射一下
│  ├─server.js      # 服务配置,服务的主要入口
1
2
3
4
5
6

# 3. server.js

const jsonServer = require('json-server')
const db = require('./db.js')
const routes = require('./routes.js')

const port = 3001

const server = jsonServer.create()
const router = jsonServer.router(db)
const middlewares = jsonServer.defaults()
const rewriter = jsonServer.rewriter(routes)
server.use(middlewares)

server.use((request, res, next) => {
    // 对请求的配置和对应返回的修改都可以写在这里
	// 转换默认_page->page
	// if (request.query.page) {
	// 	request.query._page = request.query.page
	// }
	// 转换默认_limit->pageSize
	// if (request.query.pageSize) {
	// 	request.query._limit = request.query.pageSize
	// }
	next()
})

server.use(rewriter) // 注意:rewriter的设置一定要在router设置之前
server.use(router)

server.listen(port, () => {
	console.log(`open mock server at http://localhost:${port}`)
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

# 4./modules/alarm.js

let Mock = require('mockjs');
let Random = Mock.Random;

const alarm = () => {
    const result = []
    for (let i = 0; i < 100; i++) {
        const element = {
            alarm_id: Random.id(),
            alarm_type: Random.integer(0, 2),
            host: Random.ip(),
            device_id: Random.id(),
            resp_person: Random.cname(),
            resp_status: Random.boolean(),
            alarm_time: Random.datetime(),
            value: Random.integer(),
            remark: '',
            create_time: Random.datetime(),
            create_by: Random.cname(),
            update_time: Random.datetime(),
            update_by: Random.cname()
        }
        result.push(element)
    }
    return result
}
module.exports = {
    alarm: alarm(),
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

这里直接引入了Mockjs的Random组件进行数据模拟如果没有安装参考前文在项目中安装mockjs

# 5. db.js

const apiAlarm = require('./modules/alarm.js')

module.exports = {
    // alarmList就是默认的符合Restful的api地址,get(http://localhost:3001/alarmList)
	alarmList: apiAlarm.alarm, 
}
1
2
3
4
5
6

然后我们可以把alarmList在routes.js中映射成我们需要的api地址。

# 6. routes.js

const routes = {
	"/api/alarm/getAlarmList?page=:page&pageSize=:pageSize": "/alarmList?_page=:page&_limit=:pageSize",
}
module.exports = routes
1
2
3
4

意思是说,如果传递的形式是 /api/alarm/getAlarmList?page=1&pageSize=10 将会直接映射到json-server默认提供的接口形式/alarmList?_page=1&_limit=10进行查询

# 7. 最后在package.json中增加运行

{
  "scripts": {
    "mock": "node ./json-server/server.js"
  }
}
1
2
3
4
5

# 8. 启动服务

npm run mock
yarn mock
1
2

# 9. 手机端真机调试

手机端真机调试,查看一下本机ip地址,将localhost换成ip地址即可。

# 记录未来可能遇到的问题

问题 是否尝试
如果是post、put、delete请求参数如何映射?
该api模拟方式在小程序、IOS中是否通用
#mockjs#vue
上次更新: 1/7/2022, 2:17:21 PM
vue3+ts+vite移动端vw适配方案
在nuxt中使用vue-awesome-swiper

← vue3+ts+vite移动端vw适配方案 在nuxt中使用vue-awesome-swiper→

最近更新
01
pc端rem配置
03-02
02
使用动态变量ts报错的解决
02-25
03
React Hook详解
02-18
更多文章>
Theme by Vdoing | Copyright © 2021-2022 Carmineprince | 鲁ICP备2021046263号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式