Existe-t-il un moyen simple de lire les paramètres de requête POST dans la fonction nuxtjs asyncData?
Voici un exemple:
Form.vue: em >
async asyncData(context) { // some way how to get the value of POST param "id" return { id } }
envoi des itinéraires de formulaire précédents vers la page nuxt suivante:
Clickout.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>
4 Réponses :
Enfin, j'ai trouvé la manière suivante de résoudre ce problème. Je ne sais pas si c'est le meilleur moyen, de toute façon cela fonctionne :)
J'avais besoin d'ajouter un middleware serveur server-middleware/postRequestHandler.js
async asyncData(context) { const id = context.req.body.id; return { id } }
nuxt.config.js
serverMiddleware: [ { path: '/clickout', handler: '~/server-middleware/postRequestHandler.js' }, ],
Clickout.vue
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(); }); };
Je recommande de ne pas utiliser le comportement par défaut de l'élément form
, essayez de définir un gestionnaire d'envoi comme suit:
asyncData(context) { return this.$route.params.id; }
et soumettez la méthode comme suit: p>
methods:{ submit(){ this.$router.push({ name: 'clickout', params: { id: this.item.id } }) } }
dans le composant cible faire:
<template> <form @submit.prevent="submit"> <input type="hidden" name="id" v-model="item.id" /> <input type="submit" value="submit" /> </form> </template>
Merci Boussadjra, nous aimerions le garder sous forme de formulaire POST pour empêcher les robots de suivre / soumettre ce formulaire. Je sais que ce n'est pas une manière standard de gérer les formulaires dans l'application nuxt. La solution que j'ai décrite ci-dessous fonctionne pour moi. Merci quand même.
le vote négatif avec un commentaire pourrait être plus utile
Lorsque asyncData est appelé côté serveur, vous avez accès aux objets req et res de la requête utilisateur.
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 {} } }
réf. https://nuxtjs.org / guide / async-data / # use-code-req-code-code-res-code-objets
Il est peut-être un peu tard, mais je pense que cela pourrait aider.
Dans votre fichier .vue , récupérez l'objet route du routeur nuxt:
this.$route
veuillez donner un exemple
@BoussadjraBrahim, désolé, la voici.