Javascript 如何重新运行Vue.js客户端中间件?

Javascript 如何重新运行Vue.js客户端中间件?,javascript,vue.js,vuejs2,apollo,vue-apollo,Javascript,Vue.js,Vuejs2,Apollo,Vue Apollo,在我的main.js中,我有一些检查本地存储项是否存在的代码。如果有,它将通过中间件向Apollo客户端设置添加一个授权头 但是,如果以后添加了localStorage项,则它不会出现在main.js的中间件中。因此,需要进行整页刷新,以使其拾取/了解其存在 如何从中的一个方法(例如,一个让用户登录的组件)再次运行main.js(如果这是解决方案的话) 这是我的main.js: import Vue from 'vue' import ApolloClient, { createNetworkI

在我的
main.js
中,我有一些检查本地存储项是否存在的代码。如果有,它将通过中间件向Apollo客户端设置添加一个
授权

但是,如果以后添加了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
})
从“Vue”导入Vue
从“apollo客户端”导入apollo客户端{createNetworkInterface}
从“vue apollo”导入VueAppollo
从“./App”导入应用程序
从“./路由器”导入路由器
从“./store”导入存储
const networkInterface=createNetworkInterface({uri:'https://api.graph.cool/simple/v1/MY-ID-HERE' })
const requestToken=localStorage.getItem('TOKEN'))
networkInterface.use([{
applyMiddleware(请求,下一个){
if(!req.options.headers){
req.options.headers={}
}
req.options.headers['Authorization']=requestToken?`Bearer${requestToken}`:null
下一个()
}
}])
const Apollo客户端=新Apollo客户端({
网络接口
})
const apolloProvider=新的VueAppollo({
defaultClient:Apollo客户端
})
Vue.use(VueAppollo)
/*eslint禁用无新*/
新Vue({
el:“#应用程序”,
模板:“”,
组成部分:{
应用程序
},
阿波罗供应商,
路由器,
商店
})
希望你能理解我想做什么


谢谢

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

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()   } }])

哦,我的上帝。真的那么容易吗?我想我今天盯着屏幕看太久了。谢谢你的帮助。它成功了!