【问题标题】:Nuxt: Dynamic head / meta title is undefined on ssrNuxt:动态头部/元标题在 ssr 上未定义
【发布时间】:2024-01-22 21:26:01
【问题描述】:

我有一个 nuxt 项目,其中元标题和描述来自(来自 nuxt/content)。 数据的异步获取在索引中进行,并通过 getter 在子组件中接收。

在生成时,元标记在那里,但在 ssr 上却没有:/

我尝试了异步和等待,但我仍然收到错误

Uncaught (in promise) TypeError: seoTitle is undefined

(我尝试了一个没用的await this.getArticle const,希望整个事情都在等待,这个东西在那里,但是没有)

这是我的代码:

 async head() {
    const article = await this.getArticle
    const seoTitle = await this.getArticle.seoTitle,
      title = await this.getArticle.title,
      seoDescription = await this.getArticle.description

    return {
      title: `"${
        seoTitle.length ? seoTitle : title
      }"`,
      meta: [
        {
          hid: "description",
          name: "description",
          content: `${
            seoDescription.length
              ? seoDescription.slice(0, 50)
              : seoDescription.slice(0, 50)
          }`,
        },
      ],
    };
  },

【问题讨论】:

  • @TimothyAlexisVass 为什么不呢?我也不使用它们,而 ESlint 做得很好。另外,On generate, the meta tags are there but on ssr not 是什么意思。你确实有target: staticssr: true,对吧?它们怎么会在生成时出现?
  • 是的,谢谢。我可能表达得不够详细。实际上它发生在开发模式下。我已经用 asyncDate 获得了数据。当我将它导出到静态文件中时(通过 generate --modern),它会正确添加元标记。所以这很好。但我想知道如何在 ssr 模式下存档?或者,一旦我运行构建,它会起作用吗?如果没有,如何拥有条件元标记,比如我想通过:seoTitle.length 拥有它们? seoTitle : 标题
  • 我的第一个问题仍然有效。另外,请尝试在本地构建您的应用程序以进行调试。
  • 是的@kissu 目标是 statis,配置文件中根本没有 ssr。 (目前该项目应该是静态的。但我的下一个项目不会)
  • ssr: true 是默认值,使用target: static,你应该很好。当你是 yarn generate + yarn start 时它是否有效,你看到你的元数据了吗?

标签: javascript nuxt.js meta-tags


【解决方案1】:

据我所知,您不能在 head 上使用 async,因为它通常使用一些静态值。

看看这个github answer,看起来你可以使用asyncData来访问你想在head中输入的值。

head() {
  return { title: this.info.title }
},
async asyncData ({ params }) {
  return axios.get(`/post/${params.id}/info`)
    .then((res) => {
      return {
        info: res.data.info
      }
    }).catch((err) => {
      console.log(err)
  })
},

【讨论】: