Arm*_*asi 8 javascript validation node.js express
我在使用“express-validator”包验证我的嵌套对象请求正文时遇到了一些麻烦。假设我们有一个方法来收集用户输入的主体如下:
{
"general": {
"sessionId": "a2957207-e033-49e7-b9da-1c5f946a1074",
"os": "android",
"vendor": "htc"
},
"data": [
{
"target": "logPageVisits",
"pageName": "users/packages",
"engagementTime": 350
}
]
}
Run Code Online (Sandbox Code Playgroud)
express-validator 只提供这样的验证:
req.checkBody('engagementTime')
.notEmpty()
.withMessage('Engagement-Time is required')
Run Code Online (Sandbox Code Playgroud)
似乎没有干净的方法来验证这样的嵌套对象:
req.checkBody('data.engagementTime')
.notEmpty()
.withMessage('Engagement-Time is required')
Run Code Online (Sandbox Code Playgroud)
我在Github上发现了一个已关闭的问题!但它不能满足我的担忧!
有什么更好的建议吗?
您始终可以为 Express 创建自定义中间件。
例如,在您的情况下,非常简单,它看起来像这样:
const checkNestedBodyMiddleware = (req, res, next) => {
const { data } = req.body;
// As I see, here is array in data, so we use simple find
const engTimeInArr = data.find(d => d.engagementTime);
if(!engTimeInArr){
return res.status(400).send('Engagement-Time is required');
}
next();
}
Run Code Online (Sandbox Code Playgroud)
然后在您的路线中使用它:
app.post('/some-route', checkNestedBodyMiddleware, (req, res) => {
// your route logic here.
})
Run Code Online (Sandbox Code Playgroud)
因此,在这种情况下,您可以将验证逻辑隐藏在中间件中,并且可以分配任意数量的中间件进行路由。
归档时间: |
|
查看次数: |
5054 次 |
最近记录: |