搜索

查看: 3228|回复: 11

[JavaScript] vue3.x中apollo的使用案例代码

[复制链接]
发表于 2023-5-4 11:45:28 | 显示全部楼层 |阅读模式
Editor 2023-5-4 11:45:28 3228 11 看全部
目录
  • 通过客户端获取Apollo配置
  • 环境
  • 工具的安装
  • 获取Apollo配置
  • 相关代码
  • 错误提示
  • 通过开放接口获取Apollo配置
  • 通过不带缓存的Http接口从Apollo读取配置
  • 参数说明
  • 浏览器方式
  • 请求交互方式目前为止,前端获取动态数据,都是前端与服务端进行交互获取数据,但是如果只是获取简单的一些配置属性,并没有其它的接口需要服务端提供,此时在搭建一个服务器就是资源的浪费了,希望可以直接从 apollo的配置服务器中获取,无需额外的服务端接口
    通过前端自身直接获取到apollo的配置目前看到官方支持的客户端是没有vue的,所以以下是前端获取到apollo数据的过程

    通过客户端获取Apollo配置
    环境
    "vue": "^3.2.41",
    "@vue/cli-service": "~5.0.8",
    工具的安装
    "@vue/apollo-composable": "^4.0.0-beta.2",
    "@vue/apollo-option": "^4.0.0-beta.2",
    "graphql": "^16.6.0",
    "graphql-tag": "^2.12.6",
    获取Apollo配置
    相关代码
    main.ts 配置建立链接
    const httpLink = createHttpLink({
        // You should use an absolute URL here
        uri: apiApollo,
        // credentials: 'include'
    })
    // Cache implementation
    const cache = new InMemoryCache()
    // Create the apollo client
    const apolloClient = new ApolloClient({
        link: httpLink,
        cache,
    })
    const apolloProvider = createApolloProvider({
        defaultClient: apolloClient,
    })
    const app = createApp(App, {
            setup() {
                provide(DefaultApolloClient, apolloClient)
            }
        });
    获取数据
    import { useQuery } from "@vue/apollo-composable";
    import gql from "graphql-tag";
    export default defineComponent({
      name:"page-info",
      setup(){
        const { result, error, onResult, onError } = useQuery(gql`
        query getPartners {
          partners {
            label,
            value
          }
        }
        `)
        onResult(queryResult => {
          console.log("queryResultqueryResult", queryResult.data)
          console.log(queryResult.loading)
          console.log(queryResult.networkStatus)
        })
        onError(error => {
          console.log("queryResultqueryResult error", error.graphQLErrors)
          console.log(error.networkError)
        })
      }
    })
    错误提示
    Use the @apollo/client/core import path otherwise you will also import React.

    一定注意引入的位置是import { ApolloClient, createHttpLink, InMemoryCache } from "@apollo/client/core";而不是@apollo/client,否则就会报引入react错误
    Uncaught (in promise) Error: Apollo client with id default not found. Use provideApolloClient() if you are outside of a component setup
    该方式尝试多种方式都是提示该错误,并且vue3.x 该方式暂时还没有比较完整的文档说明,所以该方式等以后更成熟之后在考虑

    通过开放接口获取Apollo配置
    根据目前的环境使用客户端的方式获取Apollo配置失败,发现目前官方推荐的还有一种方式便是通过接口获取

    通过不带缓存的Http接口从Apollo读取配置
    接口URL格式: {config_server_url}/configs/{appId}/{clusterName}/{namespaceName}?releaseKey={releaseKey}&ip={clientIp}
    Method方式: GET

    参数说明
    参数名是否必须参数值备注
    config_server_urlApollo配置服务的地址,非UI界面的地址
    appId应用的appId
    clusterName集群名 一般情况下传入 default 即可。如果希望配置按集群划分,可以参考集群独立配置说明做相关配置,然后在这里填入对应的集群名。
    namespaceNameNamespace的名字,如果没有新建过Namespace的话,传入application即可。如果创建了Namespace,并且需要使用该Namespace的配置,则传入对应的Namespace名字。需要注意的是对于properties类型的namespace,只需要传入namespace的名字即可,如application。对于其它类型的namespace,需要传入namespace的名字加上后缀名,如datasources.json
    releaseKey上一次的releaseKey将上一次返回对象中的releaseKey传入即可,用来给服务端比较版本,如果版本比下来没有变化,则服务端直接返回304以节省流量和运算
    ip应用部署的机器ip这个参数是可选的,用来实现灰度发布。

    config_server_url:不是配置的UI界面的DNS,是服务器的DNS,并且两者没有关联,所以如果直接拿界面的DNS获取是获取不到数据的

    浏览器方式
    https://apollo-config.uat.XXXX/configs/项目ID/项目空间/application
    返回数据:
    {
      "appId": "xxxx",
      "cluster": "default",
      "namespaceName": "application",
      "configurations": {//application 所有配置的值
        "title": "Apollo set value"
      },
      "releaseKey": "2023021"
    }
    请求交互方式
    axios({
      method:'get',
      url:'/configs/{appId}/{clusterName}/{namespaceName}'
    }).then((res:any)=>{
      console.log(res)
    })
    交互访问也会返回相同的数据
    到此这篇关于vue3.x中apollo的使用的文章就介绍到这了,更多相关vue apollo使用内容请搜索知鸟论坛以前的文章或继续浏览下面的相关文章希望大家以后多多支持知鸟论坛!
  • 发表于 2023-6-29 01:02:03 | 显示全部楼层
    音乐之家1 2023-6-29 01:02:03 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    发表于 2023-6-29 16:59:01 | 显示全部楼层
    123456809 2023-6-29 16:59:01 看全部
    感谢楼主的无私分享!要想知鸟论坛好 就靠你我他
    发表于 2023-6-29 21:28:13 | 显示全部楼层
    我是的十八簿 2023-6-29 21:28:13 看全部
    既然你诚信诚意的推荐了,那我就勉为其难的看看吧!知鸟论坛不走平凡路。
    发表于 2023-6-30 05:54:56 | 显示全部楼层
    Gordon520 2023-6-30 05:54:56 看全部
    楼主发贴辛苦了,谢谢楼主分享!我觉得知鸟论坛是注册对了!
    发表于 2023-6-30 09:06:36 | 显示全部楼层
    123456848 2023-6-30 09:06:36 看全部
    我看不错噢 谢谢楼主!知鸟论坛越来越好!
    发表于 2023-6-30 09:52:39 | 显示全部楼层
    123456833 2023-6-30 09:52:39 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    发表于 2023-6-30 11:08:49 | 显示全部楼层
    ffycxyw2274436 2023-6-30 11:08:49 看全部
    楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
    发表于 2023-6-30 15:39:00 | 显示全部楼层
    风来时狂放 2023-6-30 15:39:00 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    发表于 2023-7-3 17:44:33 | 显示全部楼层
    麻辣鸡翅 2023-7-3 17:44:33 看全部
    楼主发贴辛苦了,谢谢楼主分享!我觉得知鸟论坛是注册对了!
    • 您可能感兴趣
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则 返回列表

    RSS订阅| 小黑屋| 知鸟论坛 |网站地图
    本站资源来自互联网用户收集发布,如有侵权请邮件联系处理。 联系邮箱E-mail:zniao@foxmail.com
    快速回复 返回顶部 返回列表