【问题标题】:node expressjs - parsing a multipart/form-data POST data using body-parser middlewarenode expressjs - 使用 body-parser 中间件解析 multipart/form-data POST 数据
【发布时间】:2017-02-25 20:55:24
【问题描述】:

我正在发布具有multipart/form-data enctype 的表单数据。我使用了formiddable nodejs 中间件,之前它只适用于application/json 类型。

我发现 express.js 有一个名为 require('body-parser'); 的中间件,它可以实现同样的功能。

这是我的app.js

var Express = require('express');
var Multer = require('multer');
var BodyParser = require('body-parser');

var app = Express();
app.use(BodyParser.json());
app.use(BodyParser.urlencoded({extended: false}));

var storage = Multer.diskStorage({
    destination: (req, file, callback) => {
        callback(null, './uploads');
    },
    filename: (req, file, callback) => {
        callback(null, file.fieldname + '-' + Date.now());
    }
});
var upload = Multer({storage: storage}).single('songUpload');

app.post('/artists', (req, resp) => {

    var song = req.body //its empty, {}
    console.log(req.body.album) // its undefined    
    console.dir(song)
    upload(req, resp, (err) => {
        if (err) {
            return resp.end("Error uploading file, " + err);
        }
        resp.render("artists/profile", {artistName: "UPD : Radio for Dreams"});
    });
})

表单视图是

<form id="musicUpload" method="POST" enctype="multipart/form-data">

    <fieldset>
        <label for="album">Album</label>
        <input name="album"/>
        <br/>

        <label for="song"> Song </label>
        <input name="email"/>
        <br/>

        <label for="songUpload"> Upload audio </label>
        <input name="songUpload" type="file" multifile="multifile">
        <br/>

        <label for="tags"> Tags </label>
        <input name="message"/>
        <br/>

        <input type="submit" value="Share to listeners">
    </fieldset>
</form>

Content-Type:multipart/form-data 的 http 请求如下所示,

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.8,en-GB;q=0.6
Cache-Control:max-age=0
Connection:keep-alive
Content-Length:509
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryCSC5Po9i0QGe587Z
Host:localhost:3000
Origin:http://localhost:3000
Referer:http://localhost:3000/artists
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36

而且,帖子数据是

但是,在服务器端,我无法使用 express.js 解析器获取发布的数据。都是空的。

【问题讨论】:

  • 试试这个:app.post('/artists', upload, ...
  • @mparnisari 你摇滚兄弟\,,/ 确实有效。发布为答案。

标签: node.js forms express


【解决方案1】:

您需要将multer 中间件调用添加到您的路由处理程序:

app.post('/artists', upload, (req, resp) =&gt;

【讨论】:

  • 酷,它确实有效。我仍然想知道为什么我需要bodyParser?我认为 bodyParser 会给我以 json 格式发布数据,而 multer 会帮助我上传文件等。
  • 你在哪里读到你需要bodyParser?他们处理不同的事情。 multer 处理文件上传。 bodyParser 处理 json 体、url 编码体等
猜你喜欢
  • 2013-12-11
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-26
  • 2015-08-03
  • 1970-01-01
相关资源
最近更新 更多