如何检测请求正文是否已发送?
How to detect if request body was sent or not?
我正在使用 express
+ json
正文解析器。出于验证目的,我需要区分
- 用户发送了空对象请求正文 (
{}
)
- 用户未发送任何请求正文
因为我试图提供合理的错误消息,在一种情况下我需要指示用户添加缺失的字段,而在另一种情况下他们甚至可能不知道应该发送请求正文,当务之急是警告他们。
这对我来说目前似乎是不可能的,因为 json 主体解析器将 request.body
设置为 {}
以防未提供请求主体,参考:
https://github.com/expressjs/body-parser/blob/master/lib/types/json.js#L72
我的问题是,在使用 json 正文解析器时,是否可以检测请求正文是否真的由客户端发送?那么我将如何实现这样的功能:
import { Request } from 'express'
function didTheUserSendRequestBody(request: Request): boolean {
// What do?
}
哪个 returns true
当我的端点被这样命中时:
curl -X POST http://localhost:5000/foo
-H "Content-Type: application/json"
-d '{}'
而 false
为此:
curl -X POST http://localhost:5000/foo
我知道的最简单的方法是检查 req.body 是否为真
function didTheUserSendRequestBody(request: Request): boolean {
if(req.body){
// Do stuff
}
}
根据 https://developer.mozilla.org/en-US/docs/Glossary/Truthy MDN,空对象“{}”是真实的。如果没有发送正文,当您尝试访问 req.body 时它应该是未定义的,这是错误的。
有关详细信息,请参阅 https://expressjs.com/en/api.html#req
Body-parser json 有选项 verify 。它可以在这里查看原始数据。
app.use(express.json({ verify: (req, res, buf, encoding) => {
// check buff is empty ? and attach result to req ?
} }))
with verify 是带有 4 个参数的函数:“其中 buf 是原始请求主体的缓冲区”
也许你可以只检查提交的内容类型,如果用户没有附加它,那么默认值将是“未定义”。
function didTheUserSendRequestBody(request: Request): boolean {
if (!request.get('Content-Type')) {
// return any message
}
}
我正在使用 express
+ json
正文解析器。出于验证目的,我需要区分
- 用户发送了空对象请求正文 (
{}
) - 用户未发送任何请求正文
因为我试图提供合理的错误消息,在一种情况下我需要指示用户添加缺失的字段,而在另一种情况下他们甚至可能不知道应该发送请求正文,当务之急是警告他们。
这对我来说目前似乎是不可能的,因为 json 主体解析器将 request.body
设置为 {}
以防未提供请求主体,参考:
https://github.com/expressjs/body-parser/blob/master/lib/types/json.js#L72
我的问题是,在使用 json 正文解析器时,是否可以检测请求正文是否真的由客户端发送?那么我将如何实现这样的功能:
import { Request } from 'express'
function didTheUserSendRequestBody(request: Request): boolean {
// What do?
}
哪个 returns true
当我的端点被这样命中时:
curl -X POST http://localhost:5000/foo
-H "Content-Type: application/json"
-d '{}'
而 false
为此:
curl -X POST http://localhost:5000/foo
我知道的最简单的方法是检查 req.body 是否为真
function didTheUserSendRequestBody(request: Request): boolean {
if(req.body){
// Do stuff
}
}
根据 https://developer.mozilla.org/en-US/docs/Glossary/Truthy MDN,空对象“{}”是真实的。如果没有发送正文,当您尝试访问 req.body 时它应该是未定义的,这是错误的。
有关详细信息,请参阅 https://expressjs.com/en/api.html#req
Body-parser json 有选项 verify 。它可以在这里查看原始数据。
app.use(express.json({ verify: (req, res, buf, encoding) => {
// check buff is empty ? and attach result to req ?
} }))
with verify 是带有 4 个参数的函数:“其中 buf 是原始请求主体的缓冲区”
也许你可以只检查提交的内容类型,如果用户没有附加它,那么默认值将是“未定义”。
function didTheUserSendRequestBody(request: Request): boolean {
if (!request.get('Content-Type')) {
// return any message
}
}