2014-11-09 2 views
1

Я пишу приложение Node js, которое обрабатывает данные из нескольких форм и поэтому я использую multer для этой цели. Проблема в том, что req.body всегда не определено.Экспресс js 4 и multer

Вот мой код:

var app = express(); 
var http = require('http').createServer(app); 

//All environments 
app.set('port', process.env.PORT || config.ports.HTTP_PORT); 
app.set('views', config.folders.views); 
app.set('view engine', 'ejs'); 

//Express 4 dependencies 
app.use(morgan('dev')); 
app.use(multer({ dest: config.folders.uploads})) 
app.use(cookieParser()); //Parser for cookie session 
app.use(session({ secret: 'secret' })); 
app.use(passport.initialize()); //Init passport 
app.use(passport.session()); //Persistent login sessions 
app.use(flash()); //Flash messages 

//Public folder 
app.use(express.static(config.folders.public)); 

require('./auth')(passport); //Add auth methods to passport 
require('./routes')(app, passport); //Add routes 

app.post('/test', function(req, res) { 

    console.log(req.body.test); //req.body always undefined 

}); 

Что может быть проблема?

EDIT:

Теперь req.body заполняется данными, но свойство req.files еще не определено

+0

не уверен, но, возможно, вам нужно также позвонить app.use (express.bodyParser()); – user2717954

+0

bodyParser() не входит в экспресс 4+ – Eric

+0

oh ok, еще не имеет опыта работы с express 4 .. – user2717954

ответ

1

добавить bodyParser с этим кодом:

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ 
    extended: true 
})); 
+0

Кажется, что этот фрагмент исправил req.body, но req.files по-прежнему остается неопределенным – Eric

+0

Идея не существует. Я не использовал 'multer'. – Elyas74

+0

'bodyParser. *' Не обрабатывает файлы. – mscdex

0

HTML формы необходимо чтобы атрибут enctype был установлен соответствующим образом для отправки файлов. Пример:

<form method="POST" action="/foo" enctype="multipart/form-data"> 
0

Редактирование исходного кода:
Вы должны установить Multer Multer Docs npm i multer -S

const app = express(); 
const http = require('http').createServer(app); 
const multer = require('multer'); // added, wasn't in your original code. 

//All environments 
app.set('port', process.env.PORT || config.ports.HTTP_PORT); 
app.set('views', config.folders.views); 
app.set('view engine', 'ejs'); 

//Express 4 dependencies 
app.use(morgan('dev')); 
// newly added 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ 
    extended: true 
})); 

app.use(multer({ dest: config.folders.uploads}).single('file')) // added the single() method 
app.use(cookieParser()); //Parser for cookie session 
app.use(session({ secret: 'secret' })); 
app.use(passport.initialize()); //Init passport 
app.use(passport.session()); //Persistent login sessions 
app.use(flash()); //Flash messages 

//Public folder 
app.use(express.static(config.folders.public)); 

require('./auth')(passport); //Add auth methods to passport 
require('./routes')(app, passport); //Add routes 

Тестирование кода:

app.post('/test', (req, res) => { 
    console.log(req.body.test); //req.body always undefined 
    console.log(req.file); // added this, it should work fine now. 
}); 
Смежные вопросы