【问题标题】:BodyParser parse data instead of connect-multiparty in node.jsBodyParser 解析数据而不是 node.js 中的 connect-multiparty
【发布时间】:2015-07-12 21:52:40
【问题描述】:

我正在尝试使用 connect-multiparty 上传文件,参考 connect-multiparty 下面是我的 express.js 配置。

app.use(bodyParser.urlencoded({
        extended: true
    }));
    app.use(bodyParser.json());

    //file upload configuration
    app.use(multipart({
            uploadDir: config.tmp
    }));

但是当我上传文件时,如果太长,它会给我请求大小。我搜索了这个,发现我需要设置限制,所以我还设置了限制参数,如下所示:

app.use(bodyParser.json({limit:'50mb'}));

但之后我开始收到 Invalid json 错误。比我发现 bodyParser 无法解析多部分数据。但我不知道如何使用多部分中间件来解析多部分数据。

【问题讨论】:

  • 场景是什么?您有一个包含 json 对象的多部分请求?为什么要使用 2 个解析器?

标签: javascript angularjs node.js multipart body-parser


【解决方案1】:

你可以使用node-formidable module to handle multipart form data:

var formidable = require('formidable');

app.post('/upload', function(req, res, next) {
  var form = new formidable.IncomingForm();
  form.parse(req, function(err, fields, files) {
      console.log(fields);
      console.log(files);
      res.send('done');
  });
});

【讨论】:

    【解决方案2】:

    使用 bodyParserconnect-multiparty 来解析请求。
    两者不能同时使用。您可以使用 connect-multiparty 解析 json,而不是使用 bodyParser 但 bodyParser 无法解析多部分表单,因此我们需要使用其他解析器,例如 connect-multparty。
    看到这个link

    【讨论】:

    • 仅使用多方连接后,它现在也停止解析 json 数据
    • @llesh Patel 你如何访问你的请求参数?
    • @llesh Patel 见 link 它正在通过 req.body 访问 json 对象
    • 我不确定如何使用它来解析数据。如果有的话,能给我举个例子吗?
    • enctype="multipart/form-data" 形式很重要
    【解决方案3】:

    index.html 代码

    <html><body>
    <div id="main-content">
        <form action="upload" method="post" enctype="multipart/form-data">
             <input type="text" name="FirstName" ><br>
                 <input type="text" name="LastName" ><br>
                <input type="submit">
                </div>
    </div></body>
    </html>
    

    server.js

    var express = require('express');
    var app = express();
    var multipart = require('connect-multiparty');
    var multipartMiddleware = multipart();
    
    app.use("/",  express.static(__dirname + '/client/'));
    
    app.post('/upload', multipartMiddleware, function(req, resp) {
        console.log(req);
      console.log(req.body);
      // don't forget to delete all req.files when done
    });
    
    app.listen(3000,function(){
    console.log("App Started on PORT 3000");
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-27
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 2014-08-29
      • 2012-01-18
      • 2012-07-25
      • 1970-01-01
      相关资源
      最近更新 更多