vue.js 接口形式

49 篇文章 1 订阅
5 篇文章 0 订阅

前言:首先需要自己写接口的封装方法。我这里是基于uni-app封装了一个接口方法,下面内容使用了request的都是基于该封装方法。

/**
 * 请求
 */
function http({
    url,
    method = 'get',
    data,
    header = {}
}) {
    return new Promise(async (reslove, reject) => {
        uni.request({
            url: config.BASE_API + url,
            method: method,
            data: data,
            header: header,
            complete: res => {
                if (res.statusCode === 200) {
                    reslove(res.data);
                } else {
					if (res.data) {
						const { data: { error, msg } } = res;
						message.error(msg || error || '服务异常!');
					}
                    reject()
                }
            }
        });
    })
}

export default http

 接口文件页面导入:

import request from '../core/request';

1.常用写法

// postForm为自己封装的表单方法
export const login = params => { return postForm('rest/login', params) }

2.接口参数直接写在接口里面

export default {
    getContent() {
        return request({
			url: '/devops/lemon/queryContent',
            data: {
				BM: '430100',
                pageNumber: 1, 
                pageSize: 20 
			}
		});
	},
}
---------------接口调用---------------
methods: {
    getContent(id) {
        this.$api.service.getContent().then(res => {
            var content = res.data.find(v => v.CATEGORY == id);
        })
    }
}

3.根据调用接口的传参变换接口参数

// fetch为封装的get请求
export const showInfo = params => { return fetch(`/lemon/getInfo/${params.infoType}/${params.infoId}`)}
---------------接口调用---------------    
     getDetail(value) {
            const params = {
                infoType: value,
                infoId: this.fQuery.xmdm,
            };
            showInfo(params)
                .then(res => {
                    if (res.code == 200 && res.data) {
                        this.stepData = res.data;
                    }
                })
                .catch(err => {
                    this.stepData = {};
                });
        },

4.根据type不同,调用不同接口,参数一致

getRecord(type, id) {
        const _uris = {
            TD: '/devops/lemon/queryRecord',
            CK: '/devops/lemon/queryList',
        };
        if (!type) {
            console.warn('请传入 type 字段!');
        }
        return request({
            url: _uris[type],
            data: {
				id: id,
                pageNumber: 1,
                pageSize: 10
			}
        });
    },

5.接口中处理参数

export const saveInfo = params => {
      if (params.url && typeof params.url === 'string' && !params.url) {
           params.url = []
      }
      if (params.isBuilding && params.isBuilding === '否') {
          params.floorArea = 0
      }
      for (const key in params) {
           // 过滤空字符串数据,保存不做校验
          if (Object.hasOwnProperty.call(params, key) && params[key] === ''){
               // 删除对象上的属性
               Reflect.deleteProperty(params, key)
          }
      }
      return post('rest/lemon/save', { ...params, gm: true })
}

6.参数相同,接口不同,同时返回

export default {
    getPayDetail(data) {
		const one = request({
			url: '/lemon/queryOneList',
			data
		});
        const two = request({
			url: '/lemon/queryTwoList',
			data
		});
        const three = request({
			url: '/lemon/queryThreeList',
			data
		});
        // Promise.all可接收Array,Map,Set类型
		return Promise.all([one,two,three]).then(res => {
			return res;    //同时返回三个接口数据
		})
	},
}

7.参数不同,接口不同,同时返回

//参数整理
function doquery({alias, querydata}) {
	const _querdata = Object.keys(querydata).reduce((arr, k) => {
		arr.push({
			key: k,
			value: querydata[k]
		});
		return arr;
	}, [])
	const _data = {
		alias,
		querydata: JSON.stringify(_querdata),
	}
	return request({
		url: '/api/lemon/doQuery',
		method: 'POST',
		data: _data,
		header: {
			'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
		}
	})
}
export default {
	getMapRes(data) {
		const one = doquery({
			alias: 'TDGPZYLB',
			querydata: {
				type: 'sky',
				end: new Date().getTime()
			}
		}).then(res => res.rows);
		const two = doquery({
			alias: 'TDGPZYLB',
			querydata: {
				type: 'land',
				end: new Date().getTime()
			}
		}).then(res => res.rows);
		return Promise.all([one, two]).then(res => {
			return res[0].concat(res[1])
		})
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使vue.config.js中的proxy生效,需要正确配置devServer.proxy选项。根据引用和引用的内容,可以将vue.config.js配置为以下形式: ```javascript module.exports = { devServer: { proxy: { '/api': { target: 'http://localhost:8081', changeOrigin: true, pathRewrite: { '^/api': '' } } } } } ``` 这样配置后,当访问以`/api`开头的接口时,会将请求代理到`http://localhost:8081`上。请注意确保代理目标服务器已启动并能够正确响应请求。 同时,还需要在main.js文件中设置axios.defaults.baseURL为'/api',如引用所述,以确保axios在发送请求时自动添加/api前缀来实现跨域访问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [vue cli3 配置proxy代理无效的解决](https://download.csdn.net/download/weixin_38622467/14828750)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [proxy代理不生效、vue config.js不生效解决方法](https://blog.csdn.net/weixin_47379721/article/details/128576797)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值