为了账号安全,请及时绑定邮箱和手机立即绑定

从多个数据源构建 Nuxt 站点地图

从多个数据源构建 Nuxt 站点地图

蝴蝶不菲 2023-08-18 10:17:40
我正在 SSR 模式下使用 Nuxt,并希望为多个路线/数据集构建动态站点地图。我现在面临的问题是 async/await 函数只允许“data”作为变量。使用“post”作为变量的相同函数会导致“地图函数不存在”这是我的 Nuxt.config.js 文件中的内容  sitemap: {    hostname: "https://example.com",    routes: async () => {      let { data } = await axios.get('https://api.example.com/api/v1/locations');      data = data.data.map((loc) => `/locations/${loc.slug}`);      console.log(data);      let { posts } = await axios.get('https://cms.example.com/wp-json/wp/v2/posts');      posts = posts.map((post) => `/posts/${post.slug}`);      console.log(posts);      data.concat(posts);      return data    },    path: '/sitemap.xml'  }我正在寻找的结果输出应采用如下格式:[  '/locations/location-one',  '/locations/location-two',  '/locations/location-three',  '/posts/post-one',  '/posts/post-two',  '/posts/post-three',]我收到的错误:Cannot read property 'map' of undefined它发生在这条线上:posts = posts.map((post) => `/posts/${post.slug}`)所以在我看来,它不接受“posts”作为其自己的等待函数的有效变量。当第一个调用被注释掉并且使用“数据”而不是“帖子”时,该调用工作正常
查看完整描述

2 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

你的解构反应是错误的:

代替:

let { posts } = ...

经过:

let { data: posts } = ...

因为 Axios 总是返回一个“data”属性,所以你只需将其重命名为“posts”即可。


查看完整回答
反对 回复 2023-08-18
?
交互式爱情

TA贡献1712条经验 获得超3个赞

你的数组串联必须是这样的:

data.concat(posts);

push()方法仅推送一项,而不是推送一组项目。

查看完整回答
反对 回复 2023-08-18
  • 2 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信