form.parse()方法没有在node.js中调用

R J*_* J. 3 node.js formidable

我正在使用强大的包来上传文件.这是我的服务器端代码.

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


  });
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,form.parse()方法没有被调用.请为此问题提供解决方案.

Jac*_*cob 33

在将 Next.js API 路由与 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,
  },
};
Run Code Online (Sandbox Code Playgroud)

  • 这个答案实际上对我很有帮助。有一件事,作为 Next.js 新手,我尝试从当前文件中导出配置。您实际上需要从 api 处理程序 ** 导出它才能工作 (4认同)

Mar*_*hdy 7

您可能需要删除正文解析器

delete app.use(express.bodyParser());
Run Code Online (Sandbox Code Playgroud)


Tol*_*yüz 1

请添加错误处理程序并发送错误消息,否则很难得到答案。

form.on('error', function(err) { console.log(err); });
form.on('aborted', function() { console.log('Aborted'); });
Run Code Online (Sandbox Code Playgroud)

请参阅formidable文档:doc