javascript - 具有自定义标题的Express正文解析器

原文 标签 javascript node.js express body-parser

我正在设置一个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/

相关文章:

node.js - package Electron 产生没有内容的空白页

javascript - 初学者对 Express 和 socket.io 中的模块结构感到困惑

javascript - 使用nodejs运行服务器端时无法加载 Angular Controller 文件

javascript - 为什么 Mongoose 要将我的字符串转换为 ObjectId?

node.js - mongoose 文档值可以是函数吗?

javascript - ng-repeat 跟踪 $index 并从数组中删除元素

node.js - 查找引用的对象ID等于user._id的那些数据

javascript - 在MySQL联接查询的结果上过滤v-for

javascript - 如何在Firebase中显示displayName?

javascript - jQuery委托(delegate)选择器问题