Vue 开发实战实战篇 # 36:如何与服务端进行交互(Axios)

Posted 凯小默

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue 开发实战实战篇 # 36:如何与服务端进行交互(Axios)相关的知识,希望对你有一定的参考价值。

说明

【Vue 开发实战】学习笔记。

安装依赖

windows 需要安装 cross-env 才能拿到参数

npm i cross-env -D

添加脚本

"serve:no-mock": "cross-env MOCK=none vue-cli-service serve"

添加支持jsx

https://github.com/vuejs/jsx-vue2

npm install @vue/babel-preset-jsx @vue/babel-helper-vue-jsx-merge-props -D
module.exports = 
	presets: ["@vue/cli-plugin-babel/preset", "@vue/babel-preset-jsx"],
	"plugins": [
		["import",  
			"libraryName": "ant-design-vue",
			"libraryDirectory": "es",
			"style": true // 会加载 less 文件
		]
	]
;

配置 vue.config.js

module.exports = 
    lintOnSave: false,
    css: 
        loaderOptions: 
            less: 
                javascriptEnabled: true
            ,
        
    ,
    devServer: 
        proxy: 
            // '@(/api)':  target: 'http://localhost:3000',
            '/api': 
                target: 'http://localhost:8080',
                bypass: function (req, res, proxyOptions) 
                    if (req.headers.accept.indexOf('html') !== -1) 
                        console.log('Skipping proxy for browser request.');
                        return '/index.html';
                     else if(process.env.MOCK !== "none") 
                        // 将请求url转为文件名
                        const name = req.path.split("/api/")[1].split("/").join("_");
                        const mock = require(`./mock/$name`);
                        const result = mock(req.method);
                        // 需要清除缓存
                        delete require.cache[require.resolve(`./mock/$name`)];
                        return res.send(result);
                    
                ,
            ,
        ,
    ,

新增一个请求的公共方法

里面使用 jsx 的语法

import axios from "axios";
import  notification  from "ant-design-vue";

function request(options) 
    return axios(options).then(res => 
        return res;
    ).catch((error) => 
        const  response:  status, statusText  = error;
        notification.error(
            // message: h => (
            //     <div>
            //         请求错误 <span style="color: red">status</span>:options.url
            //     </div>
            // ),
            message: h => 
                return <div>
                    请求错误 <span style="color: red">status</span>options.url
                </div>
            ,
            description: statusText
        );
        return Promise.reject(error);
    )


export default request;

在分析页测试不用mock数据

我们使用一个不存在的 api 测试一下 /api/dashboard/chart1

<template>
    <div>
        <Chart :option="chartOption" style="width: 600px; height: 400px;"/>
    </div>
</template>

<script>
import Chart from "@/components/Chart.vue";
import request from "@/utils/request.js";
export default 
    data() 
        return 
            chartOption: 
        
    ,
    components: 
        Chart
    ,
    mounted() 
        this.getChartData();
        this.interval = setInterval(() => 
            this.getChartData();
        , 3000);
    ,
    beforeDestroy() 
        clearInterval(this.interval);
    ,
    methods: 
        getChartData() 
            request(
                url: "/api/dashboard/chart1",
                method: "get",
                params: 
                    id: "kaimo313"
                
            ).then(response => 
                this.chartOption = 
                    title: 
                        text: 'ECharts 入门示例'
                    ,
                    tooltip: ,
                    legend: 
                        data: ['销量']
                    ,
                    xAxis: 
                        data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
                    ,
                    yAxis: ,
                    series: [
                        
                            name: '销量',
                            type: 'bar',
                            data: response.data
                        
                    ]
                
            )
        
    ,
;
</script>

<style></style>

效果如下

启动服务测试一下

npm run serve:no-mock

效果如下:

以上是关于Vue 开发实战实战篇 # 36:如何与服务端进行交互(Axios)的主要内容,如果未能解决你的问题,请参考以下文章

Vue 开发实战实战篇 # 32:如何使用路由管理用户权限

Vue 开发实战生态篇 # 22:Nuxt核心原理是什么?

Vue 开发实战生态篇 # 21:Nuxt解决了哪些问题?

Apicloud+vue开发新闻类App实战项目

Vue 开发实战实战篇 # 43:如何做好国际化

Vue 开发实战实战篇 # 28:如何自定义Webpack和Babel配置