【问题标题】:Changing from "spa" to "universal" in Nuxt , but I only get document is not defined在 Nuxt 从“spa”更改为“universal”,但我只得到未定义的文档
【发布时间】:2020-11-04 16:29:11
【问题描述】:

我想拥有可以复制和粘贴的 url,因此在 nuxt.config 中从 spa 切换到 Universal。但是我收到此错误消息“未定义文档”。然后我用谷歌搜索这个answer 说我应该使用<no-ssr> 元素。 然而,在我的 index.vue 上使用它之后,我仍然得到同样的错误。谁能帮帮我?

抱怨文档丢失的是 node_modules/aws-amplify-vue/dist/aws-amplify-vue.common.js。

目前要测试我的 index.vue 如下:

<template>
 <v-layout column justify-center align-center>
  <div>
    <no-ssr placeholder="loading...">
      <div>hello</div>
    </no-ssr>
  </div>
 </v-layout>
</template>

如果这是导致此问题的原因,我在项目中还有其他页面没有 &lt;no-ssr&gt;

【问题讨论】:

  • 使用client-only而不是no-ssr
  • 你也可以用if(process.server)检查它是否在服务器端
  • 如果它是一个插件,那么您可以将该特定插件配置为不作为 ssr 运行。 export default { plugins: [ { src: '~/plugins/both-sides.js' }, { src: '~/plugins/client-only.js', mode: 'client' }, // 仅在客户端{ src: '~/plugins/server-only.js', mode: 'server' } // 仅在服务器端 ] }
  • 感谢 cmets。然而client-onlyand 添加模式并没有解决我的问题。尝试了“客户端”和“服务器”并添加了 ssr: false plugins: [{ src: '~plugins/aws.js', mode: 'client', ssr: false }]
  • 搜索了更多,它看起来与this 的问题相同。但没有解决方案:/

标签: vue.js nuxt.js


【解决方案1】:

对于遇到相同问题的任何人,我的解决方案如下:

  1. 将 if (process.client) 添加到我的中间件 (middleware/auth.js) 并在之后需要 AmplifyEventBus:

export const fetchUser = async () => {
  let signedIn = false;
    if (process.client) {
      const { AmplifyEventBus } = require("aws-amplify-vue");
      try {
        const user = await Auth.currentAuthenticatedUser()
        signedIn = true
      } catch (err) {
        signedIn = false
      }

      AmplifyEventBus.$on("authState", info => {
        if (info === "signedIn") {
          signedIn = true;
        } else {
          signedIn = false;
        }
      });
   }
  return signedIn
};
  1. 删除vue-localstorage 并替换为@nuxtjs/universal-storage

另见: https://github.com/nuxt/nuxt.js/issues/7738

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 2020-05-20
    • 2021-06-29
    相关资源
    最近更新 更多