vue.js NUXT生成的静态网页只有在动态路由时才会出现脚本错误

6ioyuze2  于 2022-11-17  发布在  Vue.js
关注(0)|答案(1)|浏览(131)

我在Nuxt.js上创建网站时遇到以下问题。
首先,我编写了nuxt.config.js,如下所示,这样无头CMS就可以工作了。

export default {
  target: "static",
  ssr: true,
  generate: {
    async routes() {
      const pages = await axios
        .get(
          `https://path/to/endpint`,
          {
            headers: { "XXXX-API-KEY": process.env.API_KEY },
          }
        )
        .then((res) =>
          res.data.contents.map((content) => ({
            route: `/${content.id}`,
            payload: content,
          }))
        );
      return pages;
    },
  },

    //other settings omitted

然后我准备了一个页面“/pages/_id/index.vue”,代码如下

<template>
  <div class="article">
    <p>{{ content.title }}</p>
  </div>
</template>

<script>
export default {
  name: "",
  async asyncData({ payload }) {
    if (payload) {
      return {
        content: payload,
      };
    }
  },
};
</script>

在这种情况下,当我启动“nuxtstart”并预览该页面时,实际上“content.title”成功地显示在页面上,但出现了一个控制台错误,显示“TypeError:无法读取undefined(阅读'title')"的属性。(请参阅影像)

我觉得这个行为很奇怪,因为nuxt generate应该只是生成一个静态传输的文件,但是这个错误意味着一个vue变量在浏览器上被重新求值...
当我在静态路由(如pages/preview/index.vue)上放置完全相同的代码时,不会发生此错误。
有人知道吗?

hgqdbh6s

hgqdbh6s1#

我自己解决了。
nuxt.config.js应如下所示

res.data.contents.map((content) => ({
  route: `/${content.id}`,
  payload: content,
}))

但我代码中“route”没有斜线

res.data.contents.map((content) => ({
  route: `${content.id}`,
  payload: content,
}))

我还不明白其中的区别,但我还是决定....

相关问题