【问题标题】:Can I use body-parser and Formidable at the same time?我可以同时使用 body-parser 和 Formidable 吗?
【发布时间】:2014-11-18 14:10:17
【问题描述】:

我试图解决一个问题几天,但无法理解一些事情。 我有一个使用 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;

所以,我使用这种方法处理表单值。 但是现在,我需要使用 node-formidable 来解析来自用户的图像。问题是,我可以以某种方式使用 仅适用于图像和表单的正文解析器?或者,任何人都可以帮助我了解如何处理表单并将值附加到我的变量?

【问题讨论】:

    标签: javascript node.js express formidable body-parser


    【解决方案1】:

    您可能想抽出一些时间来学习/练习强大的模块。见这个网址:https://github.com/felixge/node-formidable

    是的,强大的可用于处理表单字段和文件上传,包括多个文件上传。 body-parser 中间件不处理多部分 - https://github.com/expressjs/body-parser。在这种情况下,我会建议你使用强大的和 drop 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'));
    });
    

    【讨论】:

    • 哇,我离得太近了!是的,现在我明白我的错误了!感谢您的回复!
    • 很高兴它对您有所帮助。
    • better-body-parser 怎么样,是不是比这更好用(用于文件上传)?
    • @Qasim - 你可以使用npms.io 来比较 npm 模块的质量、流行度和维护。在这种情况下,它将是formidablebetter-body-parser 相比一个更适合你。
    【解决方案2】:

    如果您愿意,可以同时使用 body-parserformidable。您可以仅对某些特定路线使用强大的功能,并在其余路线上继续使用 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-15
      • 2016-10-14
      • 2011-07-21
      • 2015-05-19
      • 2019-05-21
      • 2021-09-05
      • 2014-04-08
      • 2020-06-23
      相关资源
      最近更新 更多