普元EOS-微前端调用base基座的ajax

1 前言

微前端调用EOS应用的服务或API,需要引入base基座,然后使用base基座中的ajax方法。

本文将介绍微前端的高开和低开使用base基座的Ajax的方法。

强烈建议不要自己引入axios或其他ajax库,因为EOS的服务接口都要求身份验证和授权,ajax请求时必须携带必要的用户信息,自己封装这些很麻烦,直接使用基座的AjaxUtil对象将非常简单

2 高开页面引入基座的Ajax

在高开页面引入Ajax代码和简单,只要页面中添加下面的代码。

javascript 复制代码
import { AjaxUtil } from 'base/lib'

然后可以使用AjaxUtil工具进行get或post的方式请求。

在AjaxUtil可以获得ajax对象,调用方法如下:

javascript 复制代码
const ajax1 = AjaxUtil.headers(AjaxUtil.buildHeaders()).ajax;

该方法获得的ajax对象,本质就是axios对象,有axios使用经验的同学完全可以将其动作axios对象使用。

2.1 关于headers方法和buildHeaders方法

EOS应用端的服务接口的调用,都要进行权限验证的,因此ajax请求的时候必须携带当前用户的token。

headers和buildHeaders方法将组装必要的Header信息,在ajax请求的时候携带在header中易通提交到服务端。

其中最重要的就是 Authorization 参数。

2.2 完整的代码

具体的代码例子可见下面:

javascript 复制代码
<template>
    <div class="main-div">
        <!-- 查询区域 -->
        <div class="div-ke1">
            <div class="search-bar">
                <el-button type="primary" @click="doTest1">测试1</el-button>
            </div>
            <div class="list-container">
                <div > {{ resultInfo }} </div>
            </div>
        </div>
    </div>
</template>
<script>

import { AjaxUtil } from 'base/lib'

export default {
    name: 'index',
    data() {
        return {
            resultInfo: ''
        }
    },
    methods: {
        doTest1() {
            // ajax请求验证devposToken是否有效
            const ajax1 = AjaxUtil.headers(AjaxUtil.buildHeaders()).ajax;
            ajax1.get('/api2/devops/pcm/dict/dict-entrys',
                { params: { 'dictTypeId': 'DPS_PJM_PROJECT_TYPE' } })
                .then(resp1 => {
                    if (resp1.data.code == 0) {
                        this.resultInfo = resp1.data.data;
                    } else {
                        this.resp1Info = resp1.data.code + ':' + resp1.data.msg;
                    }

                })
                .catch(err => {
                    this.resp1Info = 'Api请求' + '出现了异常,请联系管理员解决。';
                });
        }

    }
}
</script>


<style type="scss" scoped>  
.main-div {
      height: 100%;

      .div-ke1 {
          height: 100%;
          padding: 3px;
          display: flex;
          flex-direction: column;
      }
  }

  .search-bar {
      background-color: #f5f5f5;
      gap: 10px;
      padding: 10px;

      .sb-input1 {
          max-width: 200px;
      }
  }

  .list-container {
      flex: 1;
      overflow-y: auto;
  }
</style>

3 高开页面get方式ajax请求

代码如下:

javascript 复制代码
<script>

import { AjaxUtil } from 'base/lib'

export default {
    name: 'index',
    data() {
        return {
            resultInfo: ''
        }
    },
    methods: {
        doTest1() {
            // ajax请求验证devposToken是否有效
            const ajax1 = AjaxUtil.headers(AjaxUtil.buildHeaders()).ajax;
            ajax1.get('/api2/devops/pcm/dict/dict-entrys',
                { params: { 'dictTypeId': 'DPS_PJM_PROJECT_TYPE' } })
                .then(resp1 => {
                    if (resp1.data.code == 0) {
                        this.resultInfo = resp1.data.data;
                    } else {
                        this.resp1Info = resp1.data.code + ':' + resp1.data.msg;
                    }

                })
                .catch(err => {
                    this.resp1Info = 'Api请求' + '出现了异常,请联系管理员解决。';
                });
        }

    }
}
</script>

get方式提交的参数格式为 {"params": { 参数键值对 } }

例子如下:

javascript 复制代码
 ajax1.get('/api2/devops/pcm/dict/dict-entrys',
  { params: { 'dictTypeId': 'DPS_PJM_PROJECT_TYPE' } })

返回数据为 response 对象,该对象的data 属性是服务端相应返回的数据。

例子如下:

javascript 复制代码
ajax1.get('/api2/devops/pcm/dict/dict-entrys',
    { params: { 'dictTypeId': 'DPS_PJM_PROJECT_TYPE' } })
    .then(resp1 => {
        if (resp1.data.code == 0) {
            this.resultInfo = resp1.data.data;
        } else {
            this.resp1Info = resp1.data.code + ':' + resp1.data.msg;
        }

    })

4 高开页面Post方式Ajax请求

post方式请求本质上与get方式几乎一样,只是参数直接提供即可,而不需要 params 嵌套一层。

例子如下:

javascript 复制代码
ajax1.post('/api2/devops/pcm/dict/dict-entrys',
    { 'dictTypeId': 'DPS_PJM_PROJECT_TYPE' } )
    .then(resp1 => {
        if (resp1.data.code == 0) {
            this.resultInfo = resp1.data.data;
        } else {
            this.resp1Info = resp1.data.code + ':' + resp1.data.msg;
        }

    })

5 低开页面Ajax请求

相对高开页面的Ajax请求,低开页面提供的Ajax请求更方便,低开页面的Ajax封装的更好。

5.1 简单的get请求

get方式请求的语法如下:

javascript 复制代码
let url = "http://ip:port/路径";
let params = {"key1":"value1","key2":"value2" ....};

this.Ajax.get(url, params).then( respData=>{
  console.log(respData)
})

注意:响应数据与高开响应的数据不同,返回值是服务端相应的数据,而不是response对象。具体的可以自己了解一下response对象和response响应数据。

5.2 不带ip和端口的地址请求

在低开的时候,请求后端服务是不需要ip和端口的,因为前端的地址和后端的地址是一样的。

这时候get或post方法需要加第3个参数false,否则请求的时候路径上自动加上低开前缀。

javascript 复制代码
let url = "/路径";
let params = {"key1":"value1","key2":"value2" ....};

this.Ajax.get(url, params,false).then( respData=>{
  console.log(respData)
})

5.3 完整的例子

例子如下:

javascript 复制代码
let url = '/api2/devops/pcm/template/templates';
let params = {
  'templateType': 'project',
  'projectScope': 'project'
};
const respData1 = await this.Ajax.get(url, params, false);
if(respData1 .code == 0 ){
   console.log( respData1.data );
}

5.4 await方式请求

javascript 复制代码
let url = '/api2/devops/pcm/template/templates';
let params = {
  'templateType': 'project',
  'projectScope': 'project'
};
const respData1 = await this.Ajax.get(url, params, false);
if (respData1.code == 0) {
  console.log( respData1.data );
}

await方式请求看起来更优雅。

相关推荐
我要洋人死38 分钟前
导航栏及下拉菜单的实现
前端·css·css3
科技探秘人1 小时前
Chrome与火狐哪个浏览器的隐私追踪功能更好
前端·chrome
科技探秘人1 小时前
Chrome与傲游浏览器性能与功能的深度对比
前端·chrome
JerryXZR1 小时前
前端开发中ES6的技术细节二
前端·javascript·es6
七星静香1 小时前
laravel chunkById 分块查询 使用时的问题
java·前端·laravel
q2498596931 小时前
前端预览word、excel、ppt
前端·word·excel
小华同学ai1 小时前
wflow-web:开源啦 ,高仿钉钉、飞书、企业微信的审批流程设计器,轻松打造属于你的工作流设计器
前端·钉钉·飞书
Gavin_9151 小时前
【JavaScript】模块化开发
前端·javascript·vue.js
懒大王爱吃狼2 小时前
Python教程:python枚举类定义和使用
开发语言·前端·javascript·python·python基础·python编程·python书籍
逐·風6 小时前
unity关于自定义渲染、内存管理、性能调优、复杂物理模拟、并行计算以及插件开发
前端·unity·c#