NUXT: перенаправление с полезной нагрузкой

#vue.js #nuxt.js #vue-router

#vue.js #nuxt.js #vue-маршрутизатор

Вопрос:

Я пытаюсь создать довольно обычную вещь, давайте подумаем, что это блог. На стороне клиента щелчок по почтовой карточке открывает модал с содержимым сообщения и добавляет запрос ?postID=123 к URL.

Когда мы пытаемся зайти my-site.com?postID=123 , промежуточное программное обеспечение сервера проверяет, есть ли postID параметр запроса, и перенаправляет нас my-site.com/category/subcategory/123 с помощью перенаправления 301. Это промежуточное программное обеспечение может выглядеть следующим образом:

 export default async function ({ route, redirect, api }) {
  const postID = route.query.postID;
  if (!postID) return;

  const post = await api.get('postID')

  redirect(301, `/${post.category}/${post.subcategory}/${postID}`);
}
 

Это работает, но для создания ссылки с категорией и подкатегорией у меня уже есть свой пост. И на _post странице, на которую мы перенаправлены, я должен снова отправить свой пост в asyncData() или fetch() .

Я могу запустить post в хранилище nuxtServerInit , но, на мой взгляд, это немного халтурно.

Итак, вопрос в следующем: есть ли какой-либо способ передать некоторые данные компоненту страницы во время перенаправления?

Комментарии:

1. Если у меня все получится, вы могли бы создать промежуточное программное обеспечение в nuxt, которое перехватывало бы все перенаправления, и тогда вы могли бы передавать туда данные или параметры запроса

2. @DarioRega как я должен передавать данные компоненту страницы с помощью функции «перенаправление»?

3. Не могли бы вы рассказать мне больше о данных, которые вы хотите передать? напишите пример, и я попытаюсь адаптировать свой ответ на основе вашего кода

4. @elijah-ellanski Я реализовал аналогичную задачу с использованием перенаправления. Вы успешно решили проблему? Если да, то как именно?

Ответ №1:

Я считаю, что ДА, вы можете это сделать. Но вам нужно знать несколько вещей. Если у вас есть именованный маршрут, это проще. Просто сделайте следующее:

     // pass params to named route
    this.$router.push ({name: 'user', params: {userId: '123'}})
    
    // get params from named route in other component
    console.log(this.$router.params)
 

Однако, если у вас нет созданного именованного маршрута, вы можете сделать что-то менее элегантное, но оно будет работать…

Было бы интересно взглянуть на документацию vue по этой ссылке https://router.vuejs.org/guide/essentials/navigation.html . Вот много информации, объясняющей это лучше.

Но давайте перейдем к примеру, предположим, что вы используете router.push, и что вы понимаете, что можно выполнить функцию после выполнения замены, скажем, что вы могли бы сделать что-то вроде этого:

 this.$router.push(
{
  path: 'YOUR/PATH',
},
// onComplete Function
(myValue) => {

    // save the value in localStorage
  localStorage.setItem('VALUE', JSON.stringify(myValue))

  // to retrieve the value you can get with
  console.log(JSON.parse(localStorage.getItem('VALUE')))

  // save the value in store with vuex
  this.$store.dispatch('doSomethingFromAction', myValue)
  this.$store.commit('doSomethingFromMutation', myValue)

  // to retrieve the value you can get with
  console.log(this.$store.state.myValue)
})
 

Если вы не знаете vuex, загляните в документы: https://vuex.vuejs.org /

Комментарии:

1. Мне нужно передать данные компоненту страницы на стороне сервера, localStorage не вариант

2. Итак, затем вы можете создать конкретное имя маршрутизатора внутри вашего nuxt.config.js , вам нужно будет настроить свойство маршрутизатора для передачи некоторого значения в виде запроса или параметров. Первый вариант в моем ответе — это. взгляните на документацию vue router.vuejs.org/guide/essentials/navigation.html здесь вы получите то, что вам нужно.

3. Идея заключалась в том, чтобы не связываться с URL. просто передача данных в качестве третьего аргумента функции перенаправления кодирует их как строку запроса, это верно

4. Извините, но то, что вы ищете, не существует в данный момент