• VUE 使用 mock


    mock使用背景

    实际开发采用前后端分离形式,意味着后端API正在开发中,前端只需知道需要的数据格式即可进行开发,与后端开发同步进行。mock模拟后端提供api的调用,并返回数据。

    mock使用步骤

    1. 安装依赖

    npm install mockjs

    2. 建立文件夹

     

     新建文件夹,并命名为mock。

    3. mock文件中创建文件

    1. const Mock = require('mockjs');
    2. const utils = require('./utils');
    3. Mock.mock('/login', {'name': '@name'}) // 方式1
    4. module.exports = function(app) { // 方式2
    5. app.get('/user/userinfo', function(rep, res) {
    6. var json = utils.getJsonFile('./userInfo.json');
    7. res.json(Mock.mock(json))
    8. })
    9. }

    index.js代码如上,需要注意的是mock的2种调用方式(这里有坑!!!)

    1. {
    2. "error": 0,
    3. "data": {
    4. "userid": "m900981",
    5. "username": "bill",
    6. "password": "...."
    7. }
    8. }

    测试数据userinfo.json内容如上。

    1. const fs = require('fs');
    2. const path = require('path');
    3. module.exports = {
    4. getJsonFile:function(filePath) {
    5. var json = fs.readFileSync(path.resolve(__dirname, filePath), 'utf-8');
    6. return JSON.parse(json);
    7. }
    8. }

    工具类utils.js

    4. main.js引入

    1. import Vue from 'vue'
    2. import App from './App'
    3. import VueRouter from 'vue-router'
    4. import router from './router'
    5. import axios from 'axios'
    6. import VueAxios from './vue-axios'
    7. import store from './store'
    8. //关闭Vue的生产提示
    9. Vue.config.productionTip = false
    10. //应用插件
    11. Vue.use(VueRouter)
    12. Vue.use(VueAxios, axios)
    13. /* eslint-disable no-new */
    14. new Vue({
    15. el: '#app',
    16. components: { App },
    17. template: '',
    18. router,
    19. store
    20. })

    main.js引入axios(实际下载了axios依赖)。

    main.js引入VueAxios,是因为新建了文件夹vue-axios。

     vue-axios目录下的index.js内容如下。

    1. import Vue from 'vue'
    2. import axios from 'axios'
    3. const http = {
    4. install() {
    5. Vue.prototype.axios = axios;
    6. }
    7. }
    8. export default http

    5. 运行前引入mock

    修改webpack.dev.conf.js

    1. ...
    2. // these devServer options should be customized in /config/index.js
    3. devServer: {
    4. clientLogLevel: 'warning',
    5. historyApiFallback: {
    6. rewrites: [
    7. { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') },
    8. ],
    9. },
    10. hot: true,
    11. contentBase: false, // since we use CopyWebpackPlugin.
    12. compress: true,
    13. host: HOST || config.dev.host,
    14. port: PORT || config.dev.port,
    15. open: config.dev.autoOpenBrowser,
    16. overlay: config.dev.errorOverlay
    17. ? { warnings: false, errors: true }
    18. : false,
    19. publicPath: config.dev.assetsPublicPath,
    20. proxy: config.dev.proxyTable,
    21. quiet: true, // necessary for FriendlyErrorsPlugin
    22. before: require('../mock'), // 划重点!!!
    23. watchOptions: {
    24. poll: config.dev.poll,
    25. }
    26. },
    27. ...

    添加配置before: require('../mock')。

    运行项目,在项目启动前会引入mock。

    6. 发起请求

    实际使用是在组件中调用。

    1. <script>
    2. import mock from '../../mock' // 方式1
    3. export default {
    4. name: 'Mocker',
    5. data() {
    6. return {
    7. userInfo: {}
    8. }
    9. },
    10. methods: {
    11. getUserInfo() {
    12. this.axios.get('/user/userinfo')
    13. .then(res =>{
    14. console.log(res);
    15. })
    16. .catch(err => {
    17. console.log(err);
    18. });
    19. },
    20. login() {
    21. this.axios.post("/login").then(res => {
    22. console.log(res.data);
    23. if (res.data) {
    24. }
    25. })
    26. }
    27. }
    28. }
    29. script>

    Mocker.vue内容如上。

    需要注意的是:2种调用方式决定是否需要直接引入mock。

    7. 运行结果

    ​​​​​​​

    打开浏览器后,F12打开调试窗口。

    点击按钮“get user info”,“login”分别出现数据表明mock成功。

  • 相关阅读:
    走进微软亚洲研究院随笔
    我的服务器被挖矿了,原因竟是。。。
    部署或学习记录-Linux带Web管理界面的SVN服务器CollabNet Subversion搭建
    [机缘参悟-74]:沟通技巧-无论在职场还是在家,尽量少用反问句
    贪心算法练习day.4
    〖Python网络爬虫实战㊲〗- JavaScript 逆向实战(一)
    Word处理控件Aspose.Words功能演示:使用 Python 合并 Word 文档
    双 11,盘点一下 AI 边缘计算平台
    python lambda表达式的用法
    影视广告制作团队规模和分工
  • 原文地址:https://blog.csdn.net/A_bad_horse/article/details/126306067