使用自定义 Header 表达 Body 解析器
Express Body Parser with Custom Header
我正在设置一个 REST API 接受自定义 Content-Type 请求,但我在使用 NPM 包 [=] 解析 body 时遇到问题23=]。我正在 运行 使用 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 */});
在我的 Express 应用程序 app.js 中,我调用这个中间件:
app.use(bodyParser.json({type: 'application/*+json'}));
当我使类型更通用时,例如 'application/*',我可以使用 'application/json' Content-Type 传递请求,但不是我的自定义类型。当我这样做时,我的 req.body 是空的 object。如果 bodyParser 完全不工作,req.body 将是未定义的而不是空的 object。通过查看文档,我觉得我在 body 解析器调用中的选项是正确的,但显然不是 - 有任何见解吗?
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
配置部分,允许客户端在其请求中使用大写字母。
我正在设置一个 REST API 接受自定义 Content-Type 请求,但我在使用 NPM 包 [=] 解析 body 时遇到问题23=]。我正在 运行 使用 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 */});
在我的 Express 应用程序 app.js 中,我调用这个中间件:
app.use(bodyParser.json({type: 'application/*+json'}));
当我使类型更通用时,例如 'application/*',我可以使用 'application/json' Content-Type 传递请求,但不是我的自定义类型。当我这样做时,我的 req.body 是空的 object。如果 bodyParser 完全不工作,req.body 将是未定义的而不是空的 object。通过查看文档,我觉得我在 body 解析器调用中的选项是正确的,但显然不是 - 有任何见解吗?
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
配置部分,允许客户端在其请求中使用大写字母。