J'utilise une simple demande de publication dans mon backend pour les données d'un formulaire et pour une raison quelconque, le corps est toujours vide. J'essaie d'isoler cela, donc j'ai changé le type de contenu en application json et changé les données en json et seulement de cette façon, je peux envoyer des données.
Côté client:
// app.use(bodyParser.json()); // app.use(bodyParser.urlencoded({extended:true}));
Du côté serveur:
// app.use(bodyParser.json()); // app.use(bodyParser.urlencoded({extended:true})); app.use(express.urlencoded()); // Parse JSON bodies (as sent by API clients) app.use(express.json()); app.use(logger('dev')); app.post('/user-form-post', (req,res) =>{ console.log("dfdf"); console.log(req.body); // alwayes print empty dict {} res.end(); })
Cela ne fonctionne pas car il attend des jsons (comportement attendu):
submitForm(event) { event.preventDefault(); console.log("gggg"); const data = new FormData(event.target); axios.post("http://localhost:4000/user-form-post",data).then(function (response) { //handle success console.log(response); }) .catch(function (response) { //handle error console.log(response); });
Même comportement avec Postman.
4 Réponses :
Vous devrez analyser les données de votre formulaire du côté express. Pour cela, vous devrez utiliser multer ou multipartite. Essayez quelque chose comme ça. consulter également la documentation
const multiparty = require('multiparty'); app.post('/user-form-post', (req,res) =>{ let form = new multiparty.Form(); form.parse(req, function(err, fields, files) { Object.keys(fields).forEach(function(name) { console.log('got field named ' + name); }); }); })
Pouvez-vous expliquer pourquoi req.body est vide?
@KaramJaber Cela est dû au fait que vous envoyez des données de formulaire depuis le front-end et qu'Express ne peut pas analyser les données de formulaire. Pour cela, vous devrez utiliser une sorte de middlewares capable d'analyser les données de formulaire. Les intergiciels les plus connus sont multer et multiparty.
Un problème avec le corps de la demande lorsque vous publiez des données est data type
.
J'ai récemment un problème avec Postman
. Vous devez publier des données avec le type x-www-form-urlencoded
ou raw
-> JSON pour résoudre le problème.
Bonne chance.
quand il s'agit de mon problème, j'ai ce frontal
req.body = { form: { email: 'admin@gmail.com', password: '123' } }
axios.post("http://localhost:3000/register", { form })
mais le req.body dans le backend est vide, et j'ai compris que le formulaire dans axios.post avait encore besoin d'un crochet supplémentaire {} même si c'est un objet. comme ça
onSubmit -> form FormData {email: "admin@gmail.com", password: "123"}
Après que le backend ait un corps comme celui-ci
const form = new FormData(); form.email = this.email; form.password = this.password; console.log("onSubmit -> form", form); axios.post("http://localhost:3000/register", form )
Vous utilisez:
var multer = require('multer'); var upload = multer(); app.use(express.json());
Veuillez également utiliser le code de ligne ci-dessous, mais installez d'abord multer et écrivez le code en haut de votre application:
app.use( bodyParser.json() ); // to support JSON-encoded bodies app.use(bodyParser.urlencoded({ // to support URL-encoded bodies extended: true }));
pour analyser l'application / x-www-form-urlencoded, n'êtes-vous pas censé utiliser
app.use(bodyParser.urlencoded({ extended: false }))
?J'ai essayé cela aussi. Ca ne fonctionne pas
stackoverflow.com/questions/24543847/req-body-empty-on-posts cela peut vous aider
Déjà regardé ça ... Rien n'y fait