普元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方式请求看起来更优雅。

相关推荐
定栓3 小时前
Webpack迁到Vite第一节:模块系统迁移:require → import
运维·前端·webpack
小熊在忙fpga3 小时前
N32G430芯片的flash表示
前端·javascript·html
Data analyse4563 小时前
App埋点版本兼容的字段迁移校验
大数据·运维·服务器·前端·数据库·数据分析
todoitbo4 小时前
本来只想给内网开个口子,Natapp 却多给了一道防护
前端·javascript·vue.js·内网穿透·网络防护·natapp
会灭火的程序员4 小时前
SuperMap AgentX Server智能体接入WEB应用技术文档
前端·supermap·agentx·agentx server
CRMEB4 小时前
商品 SKU 设计,从简单规格到多规格踩过什么
java·前端·数据库·开源
Chloe.Zz4 小时前
一篇入门Agent
开发语言·前端·javascript
java1234_小锋4 小时前
【技术专题】HTML5 网页技术 - HTML5 表格标签
前端·html·html5
雪芽蓝域zzs4 小时前
JS 项目转 TS 项目(Vue3 + 若依这类后台项目)完整改造清单
前端·vue.js