web-dev-qa-db-fra.com

données corporelles non envoyées dans la demande axios

J'essaie d'envoyer des données via une requête axios à mon script principal, mais le corps semble vide.

Voici une demande envoyée depuis le front-end:

axios.request({
  method: 'GET',
  url: `http://localhost:4444/next/api`,
  headers: {
    'Authorization': token
  },
  data: {
    next_swastik: 'lets add something here'
  },

}).then((res)=>{  
  console.log("api call sucessfull",res);

}).catch((err)=>{
  console.log("api call unsucessfull",err);

  this.props.toggleLoading(false);
})

Voici un back-end:

app.get('/next/api', verifyToken, function(req, res) {
console.log(req.body);

})

Mais je reçois {} corps vide. J'obtiens des en-têtes et d'autres données mais pas des données.

6
Azima

Les demandes GET ne doivent pas avoir de corps.

Changez la méthode de 'GET' en 'POST'

Ainsi:

axios.request({
  method: 'POST',
  url: `http://localhost:4444/next/api`,
  headers: {
    'Authorization': token
  },
  data: {
    next_swastik: 'lets add something here'
  },

})

et changez votre api pour attendre un post

app.post('/next/api', verifyToken, function(req, res) {
console.log(req.body);
});

o

Modifiez la propriété data en params

axios.request({
  method: 'GET',
  url: `http://localhost:4444/next/api`,
  headers: {
    'Authorization': token
  },
  params: {
    next_swastik: 'lets add something here'
  },

})

et changez l'api pour vous déconnecter des paramètres

app.get('/next/api', verifyToken, function(req, res) {
console.log(req.params);
});

et, comme l'a dit @MaieonBrix, assurez-vous que vos en-têtes contiennent le type de contenu que vous envoyez.

3
pidizzle

Il semble qu'il ne vous reste que deux points pour le faire fonctionner:

  • un: la méthode http doit être définie sur POST au lieu de GET car vous voulez envoyer quelque chose.

  • deux: vous pouvez ensuite ajouter l'en-tête http (comme ce que vous avez fait avec l'en-tête d'autorisation) Content-Type: 'application/json`

Sur le back-end, n'oubliez pas d'utiliser une sorte de package d'utilitaire body parser comme celui-ci: body-parser et de le configurer avec votre application.

Je suppose que votre serveur utilise express, voici comment vous le ferez avec express:

const express = require('express');
const app = express();
const bodyParser = require('body-parser')
const jsonParser = bodyParser.json();

app.use(jsonParser); // use it globally
app.get('your_route', jsonParser, otherMiddleware, (req, res) => ...); // use it for specific routes

/* ... rest of your code */
2
MaieonBrix

Essaye ça

this.axios('realties', { params: this.filter })
0
Pablo Papalardo