【发布时间】:2020-03-28 17:00:05
【问题描述】:
我正在尝试为一个简单的演示快速应用程序转义表单输入,但我得到了一个我不理解的结果。
当我执行这条路线时:
/* Update a toy */
app.post('/toys/:id', [
body().escape()
], (req, res) => {
console.log("Update: ");
console.log(req.body);
toyController.update(req, res);
});
我得到这个输出:
Update:
[object Object]
在我看来,请求正文好像被破坏了。
如果我删除中间件,
/* Update a toy */
app.post('/toys/:id', (req, res) => {
console.log("Update: ");
console.log(req.body);
toyController.update(req, res);
});
我得到了预期的结果:
Update:
{
toy: {
name: 'Playstation 4',
description: 'A gaming console',
manufacturer: 'Sony',
price: '400'
},
commit: 'Update Toy'
}
更新:如果我调用 body('toy') 而不是 body(),我会得到以下结果:
{ toy: '[object Object]', commit: 'Update Toy' }
因此,问题似乎在于该主体是一个嵌套对象。
如何将验证/清理应用于body.toy 而不是所有body?
有没有一种方法可以直接调用escape 代码并将其应用于特定字符串,而不是使用整个中间件设置?
【问题讨论】:
-
试试:console.log(JSON.stringify(req.body));
-
我明白了:
"[object Object]"(这次是引号)。它看起来就像body的“对象性”被破坏了。 -
@Zack "[object Object]" 在对象上调用默认 toString() 函数时返回。当您指定 body().espace() 时,由于您的 body 是 express 验证器库中某处的对象,它应该在输入上调用 toString。 escape() 函数是 'validator' 库的一部分,它期望参数始终是一个字符串。为了进行消毒,您必须按照下面的答案分别选择每一个。
-
您可以使用
[body('toy.name').escape(), body('toy.description').escape()]转义嵌套对象中的特定文件。
标签: node.js express express-validator