Penyelesaian masalah: Log masuk awal dan isu pemuatan tapak web
P粉891237912
2023-08-03 21:02:37
<p>Saya menghadapi masalah menggunakan Vue Apollo dan Vuex dalam aplikasi Vue saya, jadi apabila saya log masuk ke tapak web buat kali pertama, halaman web tersebut kosong iaitu tidak mengandungi acara dan pengesahan, tetapi apabila saya menggunakan butang Apabila muat semula menyegarkan tapak, semua acara dimuatkan dan pengesahan boleh dilihat walaupun dalam tab rangkaian.Tolong bolehkah seseorang memberitahu saya apa yang saya lakukan salah?</p>
<p><strong>graphql.js</strong></p>
<pre class="brush:php;toolbar:false;">import { ApolloClient } daripada 'apollo-client';
import { HttpLink } daripada 'apollo-link-http';
import { InMemoryCache } daripada 'apollo-cache-inmemory';
import { createApolloProvider } daripada '@vue/apollo-option';
import { onError } daripada '@apollo/client/link/error';
onError(({ graphQLErrors, networkError }) => {
jika (graphQLErrors)
graphQLErrors.map(({ mesej, lokasi, laluan }) =>
console.log(
`[GraphQL error]: Mesej: ${message}, Lokasi: ${locations}, Path: ${path}`,
),
);
if (networkError) {
networkError.message = networkError.result.errors[0].debugMessage
console.log(`[Ralat rangkaian]: ${networkError}`)
};
});
const XPORTAL = process.env.VUE_APP_XPORTAL
fungsi getHeaders() {
tajuk const = {};
token const = window.localStorage.getItem("apollo-token");
jika (token) {
headers["Kebenaran"] = `Pembawa ${token}`;
}
pengepala["x-portal"] = XPORTAL;
headers["X-Requested-With"] = "XMLHttpRequest";
pengepala kembali
}
biarkan GRAPHQL = process.env.VUE_APP_API_GRAPHQL
biarkan GRAPHQLPORTAL = process.env.VUE_APP_API_GRAPHQLPORTAL
const graphqlClient = ApolloClient baharu({
pautan: HttpLink baharu({uri: GRAPHQL, pengepala: getHeaders()}),
cache: InMemoryCache() baharu
});
const graphqlClientPortal = ApolloClient baharu({
pautan: HttpLink baharu({ uri: GRAPHQLPORTAL, pengepala: getHeaders()}),
cache: InMemoryCache() baharu
});
pembekal fungsi eksport() {
pembekal const = createApolloProvider({
pelanggan: {
graphqlClient,
graphqlClientPortal
},
defaultClient: graphqlClient,
pilihan lalai: {
$query: {
fetchPolicy: 'cache-and-network'
}
},
})
pembekal pulangan
}</pre>
<p><strong>main.js</strong></p>
<pre class="brush:php;toolbar:false;">import { createApp } daripada "vue";
import Apl daripada "./App.vue";
import penghala daripada "./router";
import kedai daripada "./store";
import * sebagai apolloProvider daripada "../../events.live/src/utils/graphql";
const app = createApp(App);
app.use(apolloProvider.provider)
app.use(store);
app.use(router);
app.mount("#app");</pre>
<p><strong>index.js</strong></p>
<pre class="brush:php;toolbar:false;">import { provider } daripada "../utils/graphql";
tindakan: {
async fetchLogin({ commit, state }) {
kembalikan Janji baharu(async (selesai, tolak) => {
commit('loadingStatus', benar)
cuba {
respons const = menunggu pembekal().clients.graphqlClient.mutate({
mutasi:
gql`mutation Log masuk($email:String!, $password:String!)
{
log masuk(e-mel:$e-mel, kata laluan:$kata laluan){
token
}
}`, pembolehubah: {
e-mel: state.login.email,
kata laluan: state.login.password
}
})
token const = respons.data.login.token
commit('setToken', token)
localStorage.setItem('apollo-token', token)
} tangkap (ralat) {
commit('loadingStatus', false)
}
menyelesaikan ()
})
},
{
async fetchEvents({ commit }) {
cuba {
respons const = menunggu pembekal().clients.graphqlClientPortal.query({
pertanyaan: gql`
pertanyaan LiveEvents($limit: Int!, $page: Int!){
liveEvents(penomboran:{limit:$limit, page:$page}, order:{startsAt:{direction: DESC}}){
jumlah,
data{
ID,
nama,
rintisan,
penerangan,
Imej utama{
ID,
uri
},
lokasi,
jenis,
susun atur
sembang,
siaran langsung{
berakhirPada,
bermula pada
}
}
}
}
`, pembolehubah: {
had: 12,
muka surat: 0
},
});
commit('allEvents', response.data.liveEvents.data);
} tangkap (ralat) {
console.log('error-message', error.graphQLErrors)
}
},</pre>
<p><br /></p>
Ini penyelesaian saya.