1.概述
在前后端分离的前端开发中,不能绕开的是AJAX的调用,在jpaas-common-lib 组件库中封装了ajax的使用,这个控件封装了请求前置拦截器和后置拦截器,统一对请求和响应做了封装,封装了AJAX的调用方法。
2.封装介绍
2.1 请求时构建token数据、
$ajax.interceptors.request.use(config => {
        if (config.headers && config.headers['blob'] == 'true') {
            return config;
        }
        /**
         * 传入参数不需要token。
         */
        if(config.headers && !config.headers.needToken_){
            return config;
        }
        var token="";
        var tmp=localStorage.getItem("pro__Access-Token");
        if(tmp){
            token=JSON.parse(tmp).value;
        }
        if (token) {
            config.headers['Authorization'] = 'Bearer ' + token ;
        }
        return config
    }, err);在发起请求时进行了拦截,构建token数据发送到后端。
2.2 对响应进行封装
$ajax.interceptors.response.use((response) => {
        if (response && response.headers && response.headers['blob'] == 'true') {
            return response;
        }
        if (response && response.data && response.data.message) {
            if (response.data.show) {
                if (response.data.success) {
                    message.success({
                        content: response.data.message
                    })
                } else {
                    MessageBox.show(response.data);
                }
            }
        }
        return response.data
    }, err);对响应进行封装,这里要求后端的返回统一的数据格式,显示操作信息。
这里可以参考后端返回:
@Accessors(chain = true)
@Data
public class JsonResult<T extends Object> implements  Serializable {
    /**
     * 返回的成功状态=200
     */
    public final static int SUCESS_CODE=200;
    /**
     * 返回的失败状态=500
     */
    public final static int FAIL_CODE=500;3. 使用介绍
3.1 安装
npm install jpaas-common-lib
3.2 在项目中使用,比如在jpaas-vue 中使用
在jpaas-vue 中做了一层封装,参考 ajax.js
import {GetAjax} from 'jpaas-common-lib';
var config={timeout:30000};
var rxAjax=GetAjax(config);
export default rxAjax;因为ajax 需要传入 config数据,所以在项目中将 config 进行传入。
3.3 编写API接口
import rxAjax from '@/assets/js/ajax.js';
const FormPcApi = {};
FormPcApi.baseUrl= '/api-form/form/core/formPc';
FormPcApi.exportUrl= FormPcApi.baseUrl + '/export';
FormPcApi.query=function (parameter) {
  var url= FormPcApi.baseUrl + '/query';
  return rxAjax.postJson(url,parameter).then (res => {
    return res.result
  })
}
/**
 * 获取单记录
 * @param pkId
 * @returns {*}
 */
FormPcApi.get =function(pkId) {
  var url= FormPcApi.baseUrl + '/get?pkId=' + pkId;
  return rxAjax.get(url);
}这样做一次封装ajax ,前端使用这些API就好了。
3.4 接口方法介绍
3.4.1 get方法
示例
var url= FormPcApi.baseUrl + '/get?pkId=' + pkId;
rxAjax.get(url).then(res=>{
});方法定义
ajax.get =function(url,params)
输入参数:
- url 这个是数据URL
- params 这个参数为一个JSON格式,这个参数可以没有。
例如
url : “/api-form/form/core/formPc/get”
params :{pkId:”10002”,name:”ray”}
访问路径为:
http://localhost/api/api-form/form/core/formPc/get?pkId=1228950793264762881&name=abc
返回参数
这个方法返回的是一个Promise 对象。
3.4.2 postForm 方法
示例:
var url="/api-form/form/core/formPc/save";
rxAjax.postForm(url,{name:"",address:""}).then(res=>{
  console.info(res);
});方法定义
输入参数:
- url 访问数据URL
- params 这个对象有两种形式。
 {name:”ray”,address:”guangzhou”} name=ray&address=guangzhou
返回数据
这个方法返回一个Promise。
3.4.3 postUrl 方法
这个方法和postForm 不同的是数据会构建在 URL中。
示例
 var params={ ids: "001" }
  var url= FormPcApi.baseUrl + '/del';
  return rxAjax.postUrl(url,params);方法定义
输入参数:
- url 访问数据URL
- params 这个有两种形式
 json对象: {name:”ray”,address:”guangzhou”}
 键值对字符串: name=ray&address=guangzhou
返回数据
这个方法返回一个Promise。
3.4.4 put 方法
这个和post方法不同再试 HTTP 方法为put ,其他的是一致的。
3.4.5 upload 方法
示例
let formdata = new FormData();
formdata.append('file',file);
formdata.append("time", timestamp);
var url= "/upload/";
ajax.upload(url,formData,function(e){
     //e.loaded 已上传量
     //e.total 上传总量
});方法定义
ajax.upload =function(url,params,callback)
参数:
- url 上传路径
- params FormData 对象
- 上传进度回调方法,见示例。
3.5 如何添加自定义头
我们在调用时,默认添加了token,有些情况下,如果用户需要自己添加请求头。
每一个方法都有config 对象,我们可以在调用的时候传递。
ajax.get = function (url, params,config)
ajax.postForm = function (url, params,config)
ajax.download = function (url, params, config)
ajax.postJson = function (url, params,config)
ajax.postUrl = function (url, params,config)
ajax.postTimeout = function (url, params, config)
ajax.putJson = function (url, params,config)
ajax.putForm = function (url, params,config)
ajax.deleteJson = function (url, params,config)
ajax.deleteForm = function (url, params,config)
ajax.upload = function (url, params, callback,config)如果需要传递自定义请求头,可以这样做:
config.headers={token1:'2222'};
这样就看可以传递一个叫token1 的请求头。
