2014-12-03 100 views
4

我试图用multer中间件来解析multipart/from-data。这是我的POST请求:为什么bodyparser.json解析multipart/formdata?

POST /api/files HTTP/1.1 
Host: localhost:3000 
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW 
Cache-Control: no-cache 
Postman-Token: f55caef0-1d59-fe80-f6ae-00e38fcbc92a 

----WebKitFormBoundary7MA4YWxkTrZu0gW 
Content-Disposition: form-data; name="guia1"; filename="guia_1_MC_2012_2c.pdf" 
Content-Type: application/pdf 

----WebKitFormBoundary7MA4YWxkTrZu0gW 

这是我的app.js代码:

var express = require('express');   
var app  = express();      
var bodyParser = require('body-parser'); 
var validator = require('express-validator'); 
var multer = require('multer'); 

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 
app.use(multer({ dest: './files/'})); 
app.use(validator()); 

当我这样做,我得到以下错误(现在更新):

Error: invalid json 
at parse (.../node_modules/body-parser/lib/types/json.js:72:15) 
at .../node_modules/body-parser/lib/read.js:98:18 
at IncomingMessage.onEnd (.../node_modules/body-parser/node_modules/raw-body/index.js:136:7) 
at IncomingMessage.g (events.js:180:16) 
at IncomingMessage.EventEmitter.emit (events.js:92:17) 
at _stream_readable.js:920:16 
at process._tickCallback (node.js:415:13) 

所以看起来bodyParser.json()是解析数据的时候,它不应该。

+0

您使用的是什么版本的'body-parser'?这些行号不匹配当前分支或我能看到的任何最近的分支。也许尝试升级? – loganfsmyth 2014-12-03 23:07:48

+0

尝试更新到bodyParser版本1.10.0,但仍然出现错误。感谢loganfsmyth! – Gonzalo 2014-12-04 00:02:46

+3

你如何得到这个请求的正文输出?您需要进行一些调试以查看您获得的数据。我会在bodyparser行之前添加一个中间件函数,并将请求主体转储到控制台进行验证。 – loganfsmyth 2014-12-04 00:46:42

回答

11

刚刚发现身体分析器工作正常!事情是,邮递员默认情况下提交multipart/form-data时,将content-type设置为application/json,同时隐藏Header。感谢loganfsmyth !!