gpt4 book ai didi

javascript - 如何重新运行 Vue.js ApolloClient 中间件?

转载 作者:搜寻专家 更新时间:2023-10-30 22:25:25 24 4
gpt4 key购买 nike

在我的 main.js 中,我有一些代码可以检查是否存在 localStorage 项目。如果有,它将通过中间件向 ApolloClient 设置添加 Authorization header 。

但是,如果 localStorage 项是稍后添加,它不会出现在 main.js 的中间件中。因此,整页刷新 是必需的,以便让它拾取它/知道它的存在。

我怎样才能从一个方法再次运行 main.js(如果这甚至是解决方案),比如说一个让用户登录的组件?

这是我的 main.js:

import Vue from 'vue'
import ApolloClient, { createNetworkInterface } from 'apollo-client'
import VueApollo from 'vue-apollo'
import App from './App'
import router from './router'
import store from './store'

const networkInterface = createNetworkInterface({ uri: 'https://api.graph.cool/simple/v1/MY-ID-HERE' })
const requestToken = localStorage.getItem('TOKEN')

networkInterface.use([{
applyMiddleware (req, next) {
if (!req.options.headers) {
req.options.headers = {}
}
req.options.headers['Authorization'] = requestToken ? `Bearer ${requestToken}` : null
next()
}
}])

const apolloClient = new ApolloClient({
networkInterface
})

const apolloProvider = new VueApollo({
defaultClient: apolloClient
})

Vue.use(VueApollo)

/* eslint-disable no-new */
new Vue({
el: '#app',
template: '<App />',
components: {
App
},
apolloProvider,
router,
store
})

希望你能明白我在做什么?

谢谢

最佳答案

我认为您需要将 requestToken 声明移到 applyMiddleware 函数中。这样,每次发出请求时,您都将检查本地存储中的 token 。否则,它只会在页面加载时检查一次,您最终会看到您描述的行为。

networkInterface.use([{   applyMiddleware (req, next) {
const requestToken = localStorage.getItem('TOKEN')
if (!req.options.headers) {
req.options.headers = {}
}
req.options.headers['Authorization'] = requestToken ? `Bearer ${requestToken}` : null
next() } }])

关于javascript - 如何重新运行 Vue.js ApolloClient 中间件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45461745/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com