2017-09-22 4 views
0

J'essaie d'envoyer des données de forme à nodejs mais req.body est toujours vide et req.files n'est pas défini. Voici mon code index.jspourquoi req.body est toujours vide et req.files est toujours indéfini lors de l'envoi de données de formulaire

const express = require('express'); 
const app = express(); 
const mongoose = require('mongoose'); 
mongoose.Promise = global.Promise; 
const config = require('./config/database'); 
const path = require('path'); 
const bodyParser = require('body-parser'); 
app.use(bodyParser.urlencoded({extended: true})); 
app.use(bodyParser.json()); 
const router = express.Router(); 
const products = require('./routes/product')(router); 
const port = process.env.PORT || 3030; 
app.use('/products', products); 

app.listen(port,() => { 
    console.log('Listening on port ' + port + ' in ' + process.env.NODE_ENV + ' mode'); 
}); 

et product.js déposer

let multer = require('multer'); 
let upload = multer(); 


module.exports = (router) => { 

    router.post('/newProduct', (req, res) => { 
      console.log('req'); 
      console.log(req.body); 
      console.log(req.files); 
}) 
} 
+0

Je suppose par «données de formulaire» que vous voulez dire «multipart/form-data» pour les téléchargements de fichiers? 'body-parser' ne supporte pas les corps en plusieurs parties, voir https://expressjs.com/fr/resources/middleware/body-parser.html Je suggère d'essayer' multer' https://expressjs.com/fr /resources/middleware/multer.html – skirtle

+0

il halte, merci) – Mona

Répondre

0

Je suggère au moins lire la multer readme

Vous devez dire multer pour télécharger le fichier ou les fichiers pour chaque route.

Par exemple

router.post('/newProduct', upload.array('files', 5), (req, res) => { 
      console.log('req'); 
      console.log(req.body); 
      console.log(req.files); 
}) 

Vous pouvez également utiliser upload.single() pour un seul fichier ou upload.fields() pour gérer plusieurs champs de formulaire de téléchargement. Mais tout cela est mieux expliqué dans leur page.