Vuejs2 在asyncData中共享代码并使用Nuxt装载

Vuejs2 在asyncData中共享代码并使用Nuxt装载,vuejs2,nuxt.js,Vuejs2,Nuxt.js,我希望共享相同的代码块以获取asyncData中的数据,并使用Nuxt装载 例如在asyncData async asyncData({ $api, $auth, route, error, store }) { if( !process.server ) return null; let res = {}; let stockData = await $api.stocks.getStock(route.params.name); if( stockData

我希望共享相同的代码块以获取asyncData中的数据,并使用Nuxt装载

例如在
asyncData

  async asyncData({ $api, $auth, route, error, store }) {
    if( !process.server ) return null;
    let res = {};
    let stockData = await $api.stocks.getStock(route.params.name);
    if( stockData ) { res.stockData = stockData.data; }
    return res;
  },
mounted()


这两个代码块都从服务器端获取数据。如何编写一个通用函数来重用它,而不是编写两次?在nuxt文档中,
您无权通过此内部异步数据访问组件实例,因为它是在启动组件之前调用的。

关于您对API调用服务器和客户端的评论,这就是您提出问题的原因-当
asyncData
被称为服务器端和客户端时,无需在
mounted
中复制或共享它。您可以在nuxt文档中找到以下内容:

每次加载
page组件之前都会调用
asyncData
。信息技术 将调用服务器端一次(在第一次请求Nuxt应用程序时) 在导航到其他路由时使用客户端


这意味着-假设您的
asyncData
位于页面A上,用户使用页面B进入您的站点,并通过nuxt链接从页面B导航客户端到页面A,在初始化页面组件之前,它也会触发
asyncData
客户端。

我不确定是否理解正确-您为什么要这样做在两个位置调用?在asyncData中,它用于nuxt的服务器端呈现。如果来自其他页面,则为客户端安装。如果你有任何问题,请告诉我。好的。这就是我认为你想做的事。但是asyncData也被称为客户端。你能解释一下“但是asyncData也被称为客户端”吗?@Tester他的意思是,如果你想要一个只在服务器端调用的函数(意味着每个会话只调用一次),那么每次有人使用asyncData访问该站点时,都会调用asyncData中的API调用看看你在Vuex中放置了什么。假设我有一个axios实例,我在其中添加了auth头。我是否可以在asyncData中使用该axios实例。现在我无法从asyncData进行身份验证调用。
if(ObjectHelper().isEmpty( this.stockData )) {
  this.$api.stocks.getStock(route.params.name).then(res => {
    this.stockData = res.data;
  })
}