简体   繁体   English

如何在 URL 中创建没有 ID 的 Nuxt 动态路由

[英]How to create Nuxt dynamic routing without the ID in the URL

Normally in Nuxt when creating dynamic routing for things like blogs post, I would do something like the following structure.通常在 Nuxt 中为博客文章之类的东西创建动态路由时,我会做类似以下结构的事情。

Pages directory页面目录

  • pages/posts/页面/帖子/
  • pages/posts/index.vue页面/帖子/index.vue
  • pages/posts/_category/页面/帖子/_category/
  • pages/posts/_category/index.vue页面/帖子/_category/index.vue
  • pages/posts/_category/_sub-category/页面/帖子/_category/_sub-category/
  • pages/posts/_category/_sub-category/_id.vue页面/帖子/_category/_sub-category/_id.vue

/pages/posts/_category/_sub-category/_id.vue /pages/posts/_category/_sub-category/_id.vue

<template>
  <div>
    <h1>{{ title }}</h1>
  </div>
</template>

<script>
import axios from 'axios'
export default {
  data () {
    return {
      id: this.$route.params.id,
      all_posts: '',
      filtered_post: '',
      post_data: '',
      category: '',
      sub_category: '',
      title: ''
    }
  },

  mounted () {
    this.getSingle()
  },

  methods: {

    getSingle () {
      axios.get('someapiendpoint')
        .then((response) => {
          // get response data
          this.all_posts = response.data
          // filter response data by id
          this.filtered_post = this.all_posts.filter(post => post.id === this.id)
          // get data from index [0]
          this.post_data = this.filtered_post[0]
          // set data vars
          this.category = this.post_data.category
          this.sub_category = this.post_data.sub_category
          this.title = this.post_data.title
        })
    }

  }

}
</script>

Nuxt.config.js Nuxt.config.js

generate: {
    routes () {
      return axios.get('https://someapiendpoint').then((res) => {
        return res.data.map((post) => {
          return {
            route: '/posts/' + post.category + '/' + post.slug + '/' + post.id,
            payload: (post)
          }
        })
      })
    }
  },

Nuxt Links Nuxt 链接

<nuxt-link :to="{ path: '/posts/' + post.category + '/' + post.sub_category + '/' + post.id}" v-for="post in displayedPosts" :key="post.id">
    {{ post.title }}
</nuxt-link>

And this would generate routes like这会产生类似的路线

/posts/my-category/my-sub-category/my-article-title/12345 /posts/my-category/my-sub-category/my-article-title/12345

My question is how can I remove the ID from the URL and still get the data based on the ID but with a URL like this我的问题是如何从 URL 中删除 ID 并仍然根据 ID 获取数据但使用这样的 URL

/posts/my-category/my-sub-category/my-article-title/ /posts/我的类别/我的子类别/我的文章标题/

Keeping the id on the URL is not really good for SEO.在 URL 上保留 id 对 SEO 来说并不是很好。 You can filter your posts only by slugs instead of IDs, a slug is unique for each post.您只能通过 slug 而不是 ID 过滤帖子,每个帖子的 slug 都是唯一的。 or if you still want to use the ID as the key to filter, you can use Vuex to save the current post ID on click.或者如果你仍然想使用 ID 作为过滤的 key,你可以使用 Vuex 在点击时保存当前的帖子 ID。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM