目前为止,前端获取动态数据,都是前端与服务端进行交互获取数据,但是如果只是获取简单的一些配置属性,并没有其它的接口需要服务端提供,此时在搭建一个服务器就是资源的浪费了,希望可以直接从 apollo的配置服务器中获取,无需额外的服务端接口
通过前端自身直接获取到apollo的配置目前看到官方支持的客户端是没有vue的,所以以下是前端获取到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",
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配置失败,发现目前官方推荐的还有一种方式便是通过接口获取
接口URL格式: {config_server_url}/configs/{appId}/{clusterName}/{namespaceName}?releaseKey={releaseKey}&ip={clientIp}
Method方式: GET
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使用内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!