formidable is not a function的问题

文章讲述了作者在使用Express框架处理文件上传时遇到的问题,通过调整formidable的使用方式(如使用new方法创建form对象),解决了显示错误。内容涉及安装formidable包、设置上传路径和正确解析文件信息。
摘要由CSDN通过智能技术生成

根据尚硅谷node.js视频教程中第121视频(_express框架_处理文件上传),所写代码进行测试

var express = require('express');
var router = express.Router();
//导入
const formidable = require('formidable');

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

//显示网页的 (表单)
router.get('/portrait', (req, res) => {
  res.render('portrait');
});

//处理文件上传
router.post('/portrait', (req, res) => {
  //创建 form 对象
  const form =  formidable({ 
    multiples: true ,
    //设置上传文件的保存目录
    uploadDir: __dirname + '/../public/images',
    //保持文件后缀
    keepExtensions: true
  });
  //解析请求报文
  form.parse(req, (err, fields, files) => {
    if (err) {
      next(err);
      return;
    }
    // console.log(fields);// text  radio  checkbox  select
    // console.log(files); // file
    
    //服务器保存该图片的访问 URL
    // /images/8ad3d5e36012212ba7642c000.jpg
    let url = '/images/' + files.portrait.newFilename;// 将来将此数据保存在数据库中
    
    res.send(url);//以后存入数据库
  });
});

module.exports = router;


安装了formidable软件包,并启动服务

点击上传文件后

显示这种错误

多次在网络寻找方法后我将代码这部分内容

用new .方法的方式改为这种

重新打开网页上传图片后

用express -e 自己需要的文件名出重新创建的骨架,把相关代码复制粘贴,重新安装formidable依赖,就能正常用formidable软件包了

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
`formidable` 是一个 Node.js 模块,用于解析 HTTP 请求中的表单数据,支持文件上传。它可以将表单数据解析为可读流或者对象,非常适合处理大文件上传和表单数据解析。 `formidable` 的主要特点如下: - 可处理普通表单字段和上传文件。 - 可将表单数据解析为对象或可读流。 - 可设置上传文件的最大大小和上传目录等参数。 - 支持自定义上传文件的命名和存储路径。 - 支持自定义解析器,可处理非标准的表单数据格式。 - 支持流式处理大文件上传,不会占用过多内存。 使用 `formidable` 模块非常简单,只需要通过 `require('formidable')` 引入模块,然后创建一个 `Formidable` 实例,调用 `parse()` 方法解析表单数据即可。通常情况下,我们会将 `Formidable` 实例放在 HTTP 服务器的请求处理函数中,以便处理客户端提交的表单数据。 下面是一个使用 `formidable` 模块处理文件上传的示例代码: ```javascript const http = require('http'); const formidable = require('formidable'); const fs = require('fs'); http.createServer((req, res) => { if (req.url === '/upload' && req.method.toLowerCase() === 'post') { const form = new formidable.IncomingForm({ uploadDir: './uploads', // 上传文件保存的目录 keepExtensions: true, // 是否保留上传文件的扩展名 maxFileSize: 2 * 1024 * 1024, // 上传文件大小限制,单位为字节 }); form.parse(req, (err, fields, files) => { if (err) { console.error(err); res.statusCode = 500; res.end('Internal Server Error'); return; } // 处理上传的文件 const { file } = files; const { path, name } = file; const newPath = `${form.uploadDir}/${name}`; fs.rename(path, newPath, (err) => { if (err) { console.error(err); res.statusCode = 500; res.end('Internal Server Error'); return; } res.statusCode = 200; res.end('File uploaded successfully'); }); }); } else { res.statusCode = 404; res.end('Not Found'); } }).listen(8080); ``` 在上面的示例代码中,我们使用 `formidable` 模块处理客户端上传的文件,并将上传的文件保存到指定的目录中。在 `IncomingForm` 构造函数中,我们可以设置上传文件的参数,如上传目录、是否保留扩展名、上传文件大小限制等。在 `parse()` 方法回调函数中,我们处理上传的文件,将其重命名并保存到指定的目录中。最后,我们向客户端发送上传成功的响应。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值