Как прочитать параметры запроса POST в Nuxtjs?

есть ли простой способ прочитать параметры запроса POST в функции asyncData nuxtjs?

Вот пример:

Форма.vue:

<template>
    <form method = "post" action = "/clickout" target = "_blank">
         <input type = "hidden" name = "id" v-model = "item.id" />
         <input type = "submit" value = "submit" />
    </form>
</template>

отправка предыдущих маршрутов формы на следующую следующую страницу:

Clickout.vue

async asyncData(context) {
    // some way how to get the value of POST param "id"
    return { id }
}

пожалуйста, приведите пример

Boussadjra Brahim 21.01.2019 13:20

@BoussadjraBrahim, извините, вот оно.

Martin Rázus 21.01.2019 15:11
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
11
2
8 612
4

Ответы 4

Наконец, я нашел следующий способ, как это решить. Я не уверен, что это лучший способ, во всяком случае, он работает :)

Мне нужно было добавить промежуточное ПО сервера сервер-промежуточное ПО/postRequestHandler.js

const querystring = require('querystring');

module.exports = function (req, res, next) {
    let body = '';

    req.on('data', (data) => {
        body += data;
    });

    req.on('end', () => {
        req.body = querystring.parse(body) || {};
        next();
    });
};

nuxt.config.js

serverMiddleware: [
        { path: '/clickout', handler: '~/server-middleware/postRequestHandler.js' },
    ],

Clickout.vue

async asyncData(context) {
    const id = context.req.body.id;
    return { id }
}

Я рекомендую не использовать поведение элемента form по умолчанию, попробуйте определить обработчик отправки следующим образом:

<template>
<form @submit.prevent = "submit">
     <input type = "hidden" name = "id" v-model = "item.id" />
     <input type = "submit" value = "submit" />
</form>
</template>

и отправьте метод следующим образом:

  methods:{
     submit(){
       this.$router.push({ name: 'clickout', params: { id: this.item.id } })
     
        }
     }

в целевом компоненте выполните:

     asyncData(context) {

         return  this.$route.params.id;
    }

Спасибо Boussadjra, мы хотели бы сохранить его как форму POST, чтобы боты не следовали/отправляли эту форму. Я знаю, что это не стандартный способ обработки форм в приложении nuxt. Решение, которое я описал ниже, работает для меня. Спасибо, в любом случае.

Martin Rázus 21.01.2019 17:13

Когда asyncData вызывается на стороне сервера, у вас есть доступ к объектам req и res запроса пользователя.

export default {
  async asyncData ({ req, res }) {
    // Please check if you are on the server side before
    // using req and res
    if (process.server) {
      return { host: req.headers.host }
    }

    return {}
  }
}

исх. https://nuxtjs.org/guide/async-data/#use-code-req-code-code-res-code-objects

Может быть, это немного поздно, но я думаю, что это может помочь.

В вашем файле .vue получите объект маршрута nuxt router:

this.$route

Он хранит некоторую полезную информацию, такую ​​как путь, хэш, параметры и запрос.

Взгляните на это для более подробной информации об этом.

Другие вопросы по теме