문제 해결: 초기 로그인 및 웹사이트 로딩 문제
P粉891237912
P粉891237912 2023-08-03 21:02:37
0
1
561
<p>Vue 애플리케이션에서 Vue Apollo 및 Vuex를 사용하는 데 문제가 있어서 처음으로 웹사이트에 로그인할 때 웹페이지가 비어 있습니다. 즉, 이벤트와 인증이 포함되어 있지 않지만 새로 고침을 사용할 때 버튼을 누르면 사이트가 새로 고쳐지고 모든 이벤트가 로드되며 네트워크 탭에서도 인증이 표시됩니다.누군가 내가 뭘 잘못하고 있는지 말해 줄 수 있습니까?</p> <p><strong>graphql.js</strong></p> <pre class="brush:php;toolbar:false;">'apollo-client'에서 { ApolloClient } 가져오기; 'apollo-link-http'에서 { HttpLink }를 가져옵니다. import { InMemoryCache } from 'apollo-cache-inmemory'; import { createApolloProvider } from '@vue/apollo-option'; '@apollo/client/link/error'에서 { onError }를 가져옵니다. onError(({ graphQLErrors, networkError }) => { if(graphQLErrors) graphQLErrors.map(({ 메시지, 위치, 경로 }) => 콘솔.로그( `[GraphQL 오류]: 메시지: ${message}, 위치: ${locations}, 경로: ${path}`, ), ); if (네트워크 오류) { networkError.message = networkError.result.errors[0].debugMessage console.log(`[네트워크 오류]: ${networkError}`) }; }); const XPORTAL = process.env.VUE_APP_XPORTAL 함수 getHeaders() { const 헤더 = {}; const 토큰 = window.localStorage.getItem("apollo-token"); if (토큰) { headers["Authorization"] = `Bearer ${token}`; } 헤더["x-portal"] = XPORTAL; headers["X-Requested-With"] = "XMLHttpRequest"; 헤더 반환 } GRAPHQL = process.env.VUE_APP_API_GRAPHQL을 보자 GRAPHQLPORTAL = process.env.VUE_APP_API_GRAPHQLPORTAL을 보자 const graphqlClient = 새로운 ApolloClient({ 링크: 새로운 HttpLink({uri: GRAPHQL, 헤더: getHeaders()}), 캐시: 새로운 InMemoryCache() }); const graphqlClientPortal = 새로운 ApolloClient({ 링크: 새로운 HttpLink({ uri: GRAPHQLPORTAL, 헤더: getHeaders()}), 캐시: 새로운 InMemoryCache() }); 내보내기 함수 제공자() { const 공급자 = createApolloProvider({ 고객: { 그래프ql클라이언트, graphql클라이언트 포털 }, defaultClient: graphqlClient, 기본옵션: { $쿼리: { fetchPolicy: '캐시 및 네트워크' } }, }) 반품 제공업체 }</pre> <p><strong>main.js</strong></p> <pre class="brush:php;toolbar:false;">"vue"에서 { createApp } 가져오기; "./App.vue"에서 앱을 가져옵니다. "./router"에서 라우터를 가져옵니다. "./store"에서 저장소 가져오기; * "../../events.live/src/utils/graphql"에서 apolloProvider로 가져오기; const app = createApp(앱); app.use(apolloProvider.provider) app.use(스토어); app.use(라우터); app.mount("#app");</pre> <p><strong>index.js</strong></p> <pre class="brush:php;toolbar:false;">"../utils/graphql"에서 { 공급자 } 가져오기; 작업: { 비동기 fetchLogin({ 커밋, 상태 }) { return new Promise(async (해결, 거부) => { 커밋('로딩상태', 참) 노력하다 { const 응답 = 공급자()를 기다립니다.clients.graphqlClient.mutate({ 돌연변이: gql`mutation 로그인($email:String!, $password:String!) { 로그인(이메일:$email, 비밀번호:$password){ 토큰 } }`, 변수: { 이메일: state.login.email, 비밀번호: state.login.password } }) const 토큰 = response.data.login.token 커밋('setToken', 토큰) localStorage.setItem('apollo-token', 토큰) } 잡기(오류) { 커밋('로딩상태', 거짓) } 해결하다() }) }, { 비동기 fetchEvents({ 커밋 }) { 노력하다 { const 응답 = 공급자()를 기다립니다.clients.graphqlClientPortal.query({ 쿼리: gql` LiveEvents 쿼리($limit: Int!, $page: Int!){ liveEvents(페이지 매김:{limit:$limit, page:$page}, order:{startsAt:{direction: DESC}}){ 총, 데이터{ ID, 이름, 그루터기, 설명, 메인이미지{ ID, 우리 }, 위치, 유형, 공들여 나열한 것 채팅, 실시간 스트리밍{ 종료 시간, 시작 } } } } `, 변수: { 제한: 12, 페이지: 0 }, }); commit('allEvents', response.data.liveEvents.data); } 잡기(오류) { console.log('error-message', error.graphQLErrors) } },</pre> <p><br /></p>
P粉891237912
P粉891237912

모든 응답(1)
P粉413307845

이것이 내 솔루션입니다.

으아아아
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿