【问题标题】:Nuxt Apollo SSR query that depends on another query's resultNuxt Apollo SSR 查询依赖于另一个查询的结果
【发布时间】:2020-05-19 06:14:37
【问题描述】:

SO 中的类似问题不是 SSR(服务器端渲染)特定的,它们的答案不适用于我的情况。

我正在使用基于vue-cli-plugin-apollovue-apollo@nuxtjs/apollo

我有两个查询 XYY 的变量取自 X 的结果。我想在 服务器端 上执行这两个查询。如何实现?

下面的简化示例是我能得到的最接近的示例。但是查询Y客户端执行。

{
  apollo: {
    X: {
      query: X
    },
    Y: {
      query: Y,
      variables() {
        return { id: this.X.someField };
      },
      skip() {
        return !this.X; // Skip until X have some result.
      }
    },
  }
}

基本上我想要:

  • 在服务器上执行查询 X 并获取结果。
  • 使用来自查询 X 结果的变量在服务器上执行查询 Y。

非常感谢,

【问题讨论】:

    标签: vue.js graphql apollo server-side-rendering nuxt.js


    【解决方案1】:

    通常,当您的查询依赖于另一个查询的结果时,您可以使用skip 选项来阻止请求第二个查询,直到第一个查询得到解决。但是,skipping the query means it won't be prefetched。我认为你可以做你想做的事情的唯一方法是使用asyncData 而不是依赖智能查询——你必须直接在 ApolloClient 的实例上调用query 方法。您可能可以仅针对第一个查询执行此操作,然后在您的第二个查询中将结果数据用作变量值,但我不知道之前是否提取了 asyncData您的查询已预取。

    顺便说一句,如果您正在查询自己的服务器,您可能会考虑更新您的 API。通常情况下,您需要像这样链接两个查询,这表明架构设计不佳。例如,我不应该获取用户,获取他们的 ID,然后通过 ID 获取用户的帖子——我应该能够在一个查询中获取整个数据图(用户和他们的帖子)。

    【讨论】:

    • 感谢丹尼尔的回答。 API 不在我的控制之下。我想找到一种坚持智能查询的方法,因为我不想失去使用 asyncData 的智能查询功能。
    • 不幸的是,我不相信有任何方法可以做你想做的事。
    猜你喜欢
    • 2019-11-05
    • 2020-12-17
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    相关资源
    最近更新 更多