Vue2在实际项目中的应用——服务层介绍

12 篇文章 2 订阅
11 篇文章 0 订阅

所谓的服务层就是对http请求的封装,最好不要直接在业务逻辑的代码里掺杂像下面类似的直接ajax调用:

$.ajax({
			url: 'https://url.com/user',
   			type: 'get',
   			dataType:'json',
   			contentType: "application/json;charset=UTF-8",
   			crossDomain: true,
   			success: function(data){}
})

上面的代码片段很难维护,会产生大量的重复代码。最好的办法是对几个http方法先进行一次封装,我们会封装成一个http.utils.js,放到library中去:


import Vue from 'vue';
import $ from 'jquery';
/**
	* 封装Http请求相关工具函数.
	* @namespace HttpUtils
*/
export default {
	/**
		* GET请求
		* @memberof HttpUtils.
		* @param {string} url
		* @param {object} options 参考vue-resource
	*/
	'get' (url, options) {
		return Vue.http.get(url, options);
	},
	/**
		* JSONP请求
		* @memberof HttpUtils.
		* @param {string} url
		* @param {object} options 参考vue-resource
	*/
	'jsonp' (url, options) {
		return Vue.http.jsonp(url, options);
	},
	/**
		* POST请求
		* @memberof HttpUtils.
		* @param {string} url
		* @param {object} body
		* @param {object} options 参考vue-resource
	*/
	'post' (url, body, options) {
		return Vue.http.post(url, body, options);
	},
	/**
		* DELETE请求
		* @memberof HttpUtils.
		* @param {string} url
		* @param {object} options 参考vue-resource
	*/
	'del' (url, options) {
		return Vue.http['delete'](url, options);
	},
	/**
		* PUT请求
		* @memberof HttpUtils.
		* @param {string} url
		* @param {object} body
		* @param {object} options 参考vue-resource
	*/
	'put' (url, body, options) {
		return Vue.http.put(url, body, options);
	},
	/**
		* PATCH请求
		* @memberof HttpUtils.
		* @param {string} url
		* @param {object} body
		* @param {object} options 参考vue-resource
	*/
	'patch' (url, body, options) {
		return Vue.http.patch(url, body, options);
	},
	/**
		* SCRIPT请求,调用JQuery中的请求script方法,默认会缓存
		* @memberof HttpUtils.
		* @param {string} url
	*/
	'script' (url) {
		return new Promise((resolve, reject) => {
			$.ajax({
				dataType: 'script',
				cache: true,
				url: url
			}).done(function (script, textStatus) {
				resolve(script, textStatus);
			}).fail(function (jqxhr, settings, exception) {
				reject(exception);
			});
		});
	}
};

然后再次封装对后端请求的调用,针对不同的resource,封装成不同的service,对应的service代码和业务代码放到一起。下面拿审计服务来讲:

所有服务层代码以.service后缀结尾,和相关的业务逻辑代码放在一起,比较好维护。而且当其它地方也需要这个服务的时候,可以直接import,利于重复使用。

下面看一下里面的具体代码示例:


import {Constants} from 'utils';
import {HttpUtils} from 'datapp';

let AuditSrv = {

	urls: {
		'list': Constants.BASE_URL + '/audits'
	},

	list (params = '') {
		return HttpUtils.get(this.urls.list + '?' + params);
	}
};

export {AuditSrv};

在代码中使用:

<script>
import {AuditSrv} from './audit.service';

export default {
	name: 'Audit',
    。。。
	methods: {
		loadData () {
			AuditSrv.list(this.query).then((response) => {

			}).catch(() => {

			});
		}
	}
};

</script>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值