AsyncData与nuxtServerInit

时间:2019-08-20 13:01:22

标签: javascript node.js vue.js nuxt.js

我为身份验证用户和用户令牌设置了一些cookie。

此后,我将在每个nuxtServerInit上检查Cookie中的相同数据并将其设置在商店中。

虽然我在某些页面中使用asyncaData,但似乎asyncDatanuxtServerInit之前开始...

async asyncData (context) {
    console.log(context.store.getters['auth/getToken'])
}

在此日志中,我得到null或状态内的任何预设值:

export default () => ({
  user: null,
  token: null
})

我在模块中存储了auth moduleindex.js, actions.js, mutations.js, state.js and getters.js

在行动中,我有:

export const nuxtServerInit = ({ commit, getters }, { req, res }) => {
  commit('setToken', 'token')
  console.log('WORKING...')
}

当我使用asyncData方法刷新页面时,出现错误,提示getToken getter返回null而不是'token'字符串。并且console.log中的nuxtServerInit不会触发。

在此GitHub page中,它说nuxtServerInit应该首先触发,然后在asyncData之后触发。

在我看来,这是行不通的。...

有什么想法吗?

3 个答案:

答案 0 :(得分:0)

nuxtServerInit是一项操作,需要包含在商店文件的操作导出中:

export const actions = {
  nuxtServerInit = ({ commit, getters }, { req, res }) => {
    commit('setToken', 'token')
    console.log('WORKING...')
  }
}

还请注意,它必须位于商店的根模块(index.js)中才能正常工作

答案 1 :(得分:0)

ViewController操作只能在主模块中定义。

  

如果您正在使用Vuex商店的模块模式,则仅主   nuxtServerInit中的模块将收到此操作。你需要   从那里链接您的模块动作。

https://nuxtjs.org/guide/vuex-store#the-nuxtserverinit-action

答案 2 :(得分:0)

尝试将nuxtServerInit设置为异步/等待功能。

export const async nuxtServerInit = ({ commit, getters }, { req, res }) => {
  await commit('setToken', 'token')
  console.log('WORKING...')
}