Могу ли я использовать body-parser и Formidable одновременно?
Я пытаюсь решить проблему пару дней, но не могу понять некоторые вещи. У меня есть веб-сайт, созданный с помощью NodeJS и ExpressJS, и для обработки форм я использую body-parser.
var adName = req.body.adName;
var adMessage = req.body.adMessage;
var phone = req.body.phone;
var rawPrice = req.body.price;
var rawCurrency = req.body.currency;
Итак, используя этот метод, я обрабатываю значения формы. Но теперь мне нужно использовать форму узла для анализа изображений пользователей. Вопрос в том, можно ли использовать как-то грозный только для изображений и body-parser для форм? Или, может кто-нибудь помочь мне с грозным, чтобы понять, как обрабатывать формы и прикреплять значения к моим переменным?
1 ответ
Вы можете потратить некоторое время на изучение / практику с огромным модулем. Смотрите этот URL: https://github.com/felixge/node-formidable
Да, грозный может использоваться для обработки как полей формы, так и загрузки файлов, включая несколько загрузок файлов. Промежуточное программное обеспечение body-parser не обрабатывает несколько элементов - https://github.com/expressjs/body-parser. В этом случае я посоветую вам использовать грозный и отбрасывать body-parser.
Посмотрите, если ниже экспресс-приложение поможет вам.
var formidable = require('formidable'),
util = require('util'),
express = require('express'),
app = express();
app.set('port', process.env.PORT || 3600);
app.get('/', function (req, res) {
res.send(
'<form action="/upload" enctype="multipart/form-data" method="post">'+
'<input type="text" name="adName" placeholder="adName"><br>'+
'<input type="text" name="adMessage" placeholder="adMessage"><br>'+
'<input type="text" name="phone" placeholder="phone"><br>'+
'<input type="text" name="rawPrice" placeholder="rawprice"><br>'+
'<input type="text" name="rawCurrency" placeholder="rawcurrency"><br>'+
'<input type="file" name="upload" multiple="multiple"><br>'+
'<input type="submit" value="Upload">'+
'</form>'
);
});
app.post('/upload', function(req, res){
var form = new formidable.IncomingForm();
form.uploadDir = __dirname + "/data";
form.parse(req, function(err, fields, files) {
//fields is an object containing all your fields, do waht ever you want with them from here
//file is an object containing properties of your uploaded file
res.send(util.inspect({fields: fields, files: files}));
console.log('file uploaded : ' + files.upload.path + '/' + files.upload.name);
console.log('Fields : ' + fields.adName);//you can access all your fields
});
});
//starting server
app.listen(app.get('port'), function () {
console.log('Express is listening: http://localhost:%s;', app.get('port'));
});
Вы можете использовать оба body-parser
а также formidable
в то же время, если вы хотите. Вы можете использовать formidable только для некоторых конкретных маршрутов и продолжать использовать body-parser для остальных. Ниже я показываю код, необходимый для использования грозного только для одного маршрута:
const formidableMiddleware = require('express-formidable');
app.post('/api/v1/uploadfile', formidableMiddleware(), async (req, res) => {
const file = req.files.file;
console.log('file info: ' + file);
const fields = req.fields;
console.log('fields = ' + JSON.stringify(fields));
});
Взгляните на эту ссылку: https://github.com/utatti/express-formidable/issues/1