具有自定义标题的Express Body Parser

时间:2017-04-11 13:58:28

标签: javascript node.js express body-parser

我正在设置一个REST API,它接受带有自定义Content-Type的请求,但是我在使用NPM包体解析器解析主体时遇到了问题。我正在使用Mocha和Chai-HTTP运行一些测试,并按照以下方式发送我的请求测试:

chai.request(server)
.post('/demo')
.set('Content-Type', 'application/vnd+companyName.v01+json')
.send({name: 'test'})
.end(function(err, res) {/* tests are here */});

在我的快递应用程序的app.js中,我称之为中间件:

app.use(bodyParser.json({type: 'application/*+json'}));

当我使类型更通用时,比如将它设置为'application / *',我可以通过'application / json'Content-Type传递请求,但不是我的自定义类型。当我这样做时,我的req.body是一个空对象。如果bodyParser完全不起作用,则req.body将是未定义的而不是空对象。通过查看文档,我觉得我在bodyParser调用中的选项是正确的,但显然不是 - 任何见解?

1 个答案:

答案 0 :(得分:1)

vnd+companyName.v01+json不是有效的媒体类型。

有效的媒体类型应如下所示:

[ tree. ] subtype name [ +suffix ] [ ; parameters ]

子类型名称不能包含.+个字符,这些字符是为(可选)后缀保留的,分别(RFC6838)。

因此,在您的情况下,mime类型应如下所示:

application/vnd.companyName-v01+json

然而,似乎body-parser(或更确切地说,type-is强加了额外的要求,用于匹配内容类型),因为子类型名称需要是小写:

application/vnd.companyname-v01+json

奇怪的是,该要求仅适用于body-parser配置部分,允许客户端在其请求中使用大写。