我正在设置一个REST API,该API接受带有自定义Content-Type的请求,但是我在使用NPM包body-parser解析正文时遇到了麻烦。我正在使用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调用中选择的选项是正确的,但显然不正确-有任何见解吗?
最佳答案
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
配置部分,允许客户端在其请求中使用大写字母。
关于javascript - 具有自定义标题的Express正文解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43348117/