Метод form.parse() не вызывается в node.js
Я использую грозный пакет для загрузки файла. Это мой код на стороне сервера.
var formidable = require('formidable'),
http = require('http'),
util = require('util');
app.post('/admin/uploads', function(req, res) {
console.log(req.files, req.fields);//It prints
var form = new formidable.IncomingForm();
form.parse(req, function(err, fields, files) {
console.log("Inside form parse.");//its not printing
console.log(err, fields, files);//its not printing
});
form.on('file', function(name, file) {console.log('file='+file);});//its not printing
form.on('error', function(err) { console.log(err); });//its not printing
form.on('aborted', function() { console.log('Aborted'); });//its not printing
console.log(form);//it prints
});
В приведенном выше коде метод form.parse() не вызывается. Пожалуйста, дайте решение этой проблемы.
6 ответов
У меня была такая же проблема при использовании маршрутов API Next.js с Formidable. Как указывает принятый ответ, вы должны удалить парсер тела. В Next.js вы можете экспортировать
config
объект и отключить парсинг тела.
// /pages/api/form.js
import { IncomingForm } from "formidable";
export default function handler(req, res) {
// formidable logic
}
// VV important VV
export const config = {
api: {
bodyParser: false,
},
};
Возможно, вам нужно удалить парсер тела
delete app.use(express.bodyParser());
Вызов form.parse(...)
в конце концов on(...)
События.
app.post('/admin/uploads', function(req, res) {
var form = new formidable.IncomingForm();
form.on('file', function(name, file) { });
form.on('error', function(err) { });
form.on('aborted', function() { });
form.parse(req, function(err, fields, files) { });
});
Я забыл добавить enctype="multipart/form-data" в свою html-форму, может это кому-нибудь поможет:)
Пожалуйста, добавьте обработчики ошибок и отправьте сообщение об ошибке, иначе трудно получить ответ.
form.on('error', function(err) { console.log(err); });
form.on('aborted', function() { console.log('Aborted'); });
Увидеть formidable
документация: док
Даже если вы удалитеbody-parser
и использоватьexpress.json()
и т.д... у вас будет такая же ошибка.
Проблема в том, чтоexpress.raw()
вызывает проблемы удалите его, и он работает!