Метод 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()вызывает проблемы удалите его, и он работает!

Другие вопросы по тегам