Vue项目使用mock数据的几种方式

简介: 《Vue实战》系列

本文是基于vue/cli 3.0创建的项目进行讲解

首先我们来说一说vue/cli 3.0 与 2.0 的一些不同:

  1. 3.0 移除了 static 文件目录,新增了 public 目录,这个目录下的静态资源不会经过 webpack 的处理,会被直接拷贝,所以我们能够直接访问到该目录下的资源,静态数据(如json数据、图片等)需要存放在这里。

放在public目录下的静态资源可直接通过(http://localhost:8080/+ 文件名称)来访问,不需要在前面加一个/public路径

  1. 3.0 移除了 config、build 等配置目录,如果需要进行相关配置我们需要在根目录下创建 vue.config.js 进行配置。

方式一:使用mockjs插件实现本地mock数据

  1. 安装mockjs插件
npm i mockjs -D
  1. 在src目录下创建一个mock文件夹,在mock文件夹下创建一个index.js和一个data文件夹(用于存放项目需要的模拟数据)
.
├── src
│   ├── mock
│   │   └── data
│   │   │   └──  test.json
│   │   └── index.js 
.   .
  1. mock目录下的index.js示例如下:
const Mock = require('mockjs')
// 格式: Mock.mock( url, 'post'|'get' , 返回的数据)
Mock.mock('/api/test', 'get', require('./data/test.json'))
Mock.mock('/api/test2', 'post', require('./data/test2.json'))
  1. main.js入口文件中引入mock数据,不需要时,则注释掉
require('./mock') // 引入mock数据,不需要时,则注释掉
  1. 最后,在vue模板中使用即可
axios.get('/api/test')
.then(function(res){
 console.log(res);
})
.catch(function(err){
 console.log(err);
});

方式二:在public文件夹放mock数据(无需使用mockjs插件)

  1. public文件夹下创建一个mock文件夹,用来存放模拟数据的json文件
.
├── public
│   ├── mock
│   │   └── test.json 
.   .

放在public目录下的静态资源可直接通过(http://localhost:8080/ + 文件名称)来访问,不需要在前面加一个/public路径。

  1. vue.config.js里进行路径配置,如下:
module.exports = {
devServer: {
  proxy: {
    '/api': { // 代理接口
      target: 'http://localhost:8080',
      ws: true, // proxy websockets
      changeOrigin: true, // 是否开启跨域
      pathRewrite: { // 路径重写
        '^/api': '/mock'
      }
    }
  }
}
}
  1. devServer.proxy官方文档
  2. 最后,在vue模板中使用即可
axios.get('/api/test.json') // 注意这里需要.json后缀
.then(function(res){
 console.log(res);
})
.catch(function(err){
 console.log(err);
});

这方式貌似不支持post请求,有待研究。

方式三:前端本地启动一个nodejs服务,vue项目向nodejs服务请求mock数据

  1. 创建一个node项目(为了方便,本例直接在vue项目根目录创建,当然也可以是其它任何地方)
.
├── 项目根目录
│   └── serve.js
.   .
  1. serve.js示例
const http = require('http')
// url模块用于处理与解析 前端传给后台的URL,适用于get请求(不适用于post请求),详情参见文档
const urlLib = require('url')
http.createServer(function (req, res) {
 const urlObj = urlLib.parse(req.url, true) // 注意:这里的第二个参数一定要设置为:true, query才能解析为对象形式,可以更加方便地获取key:value
 const url = urlObj.pathname
 const get = urlObj.query
 console.log(url)
 // 模拟的mock数据
 const data = {
   "code": 200,
   "list": [
       {
           "id": '0001',
           "name": "test"
       },
       {
           "id": '0002',
           "name": "test2"
       }
   ]
 }
 // console.log(get.user)
 if (url === '/test') { // 接口名
   res.write(JSON.stringify(data))
 }
 res.end()
}).listen(9000)
  1. 启动node服务
node serve.js
  1. 配置vue.config.jsproxy,解决跨域
module.exports = {
devServer: {
  proxy: {
    '/api': {
      target: 'http://localhost:9000',
      ws: true, // proxy websockets
      changeOrigin: true, // 是否开启跨域
      pathRewrite: { // 路径重写
        '^/api': ''
      }
    }
  }
}
}
  1. 最后,在vue模板中使用即可
axios.get('/api/test')
.then(function(res){
 console.log(res);
})
.catch(function(err){
 console.log(err);
});

总结

方式二目前来看只支持get方式请求,对于post请求还有待研究。方式三虽然也是一种实现方式,但实现起来比较麻烦。个人建议使用方式一,灵活、方便。

相关文章

《Vue CLi3 修改webpack配置》

相关文章
|
9月前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
483 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
JavaScript 数据可视化
vue-cli学习一:vue脚手架的 vue-cli2和vue-cli3版本 创建vue项目,vue的初始化详解
这篇文章介绍了如何使用vue-cli 2和3版本来创建Vue项目,并详细说明了两者之间的主要区别。
352 5
vue-cli学习一:vue脚手架的 vue-cli2和vue-cli3版本 创建vue项目,vue的初始化详解
|
JavaScript 容器
乾坤qiankun框架搭建 主应用为vue3的项目。
乾坤qiankun框架搭建 主应用为vue3的项目。
726 2
|
6月前
|
JavaScript 前端开发 UED
Vue 项目中如何自定义实用的进度条组件
本文介绍了如何使用Vue.js创建一个灵活多样的自定义进度条组件。该组件可接受进度段数据数组作为输入,动态渲染进度段,支持动画效果和内容展示。当进度超出总长时,超出部分将以红色填充。文章详细描述了组件的设计目标、实现步骤(包括props定义、宽度计算、模板渲染、动画处理及超出部分的显示),并提供了使用示例。通过此组件,开发者可根据项目需求灵活展示进度情况,优化用户体验。资源地址:[https://pan.quark.cn/s/35324205c62b](https://pan.quark.cn/s/35324205c62b)。
265 0
|
10月前
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
380 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
10月前
|
前端开发 JavaScript Java
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
518 13
【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
|
10月前
|
SQL JavaScript 安全
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
432 11
【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
|
10月前
|
人工智能 JavaScript 安全
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
463 13
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
|
9月前
|
资源调度 JavaScript 前端开发
Pinia 如何在 Vue 3 项目中进行安装和配置?
Pinia 如何在 Vue 3 项目中进行安装和配置?
696 4
|
10月前
|
监控 JavaScript 前端开发
ry-vue-flowable-xg:震撼来袭!这款基于 Vue 和 Flowable 的企业级工程项目管理项目,你绝不能错过
基于 Vue 和 Flowable 的企业级工程项目管理平台,免费开源且高度定制化。它覆盖投标管理、进度控制、财务核算等全流程需求,提供流程设计、部署、监控和任务管理等功能,适用于企业办公、生产制造、金融服务等多个场景,助力企业提升效率与竞争力。
622 12