我在使用 default()
sanitizer from express-validator 时遇到问题。当我在链中使用它时,例如 body("children").optional().isArray().default([])
,default
函数不会不做任何事情,导致 children
成为 undefined
。但是,如果我将它们分成两个不同的语句(添加一个单独的 body("children").default([])
sanitizer,而不是将其与其他语句链接起来),它就可以正常工作。这是一个最小的可重现示例...
import express from "express";
import { body } from "express-validator";
const app = express();
app.use(express.json());
app.post(
"/fails",
body("children").isArray().optional().default([]),
(req: express.Request) => {
console.log(`/fails output: ${JSON.stringify(req.body, null, 4)}`);
}
);
app.post(
"/works",
body("children").isArray().optional(),
body("children").default([]),
(req: express.Request) => {
console.log(`/works output: ${JSON.stringify(req.body, null, 4)}`);
}
);
app.listen(3000);
...与这些库一起使用...
@types/<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="15706d656770666655213b24223b2427" rel="noreferrer noopener nofollow">[email protected]</a>
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="680d10181a0d1b1b451e0904010c091c071a285e46595a4658" rel="noreferrer noopener nofollow">[email protected]</a>
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="b0d5c8c0c2d5c3c3f0849e81879e81" rel="noreferrer noopener nofollow">[email protected]</a>
<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="e5919c95809686978c9591a5d1cbd6cbd1" rel="noreferrer noopener nofollow">[email protected]</a>
...给出以下输出:
/fails output: {}
/works output: {
"children": []
}
两个 POST
请求的正文都是空的(我正在使用 Postman 来测试这一点)。
为什么会发生这种情况?我尝试过使用 可选
、isArray
和 default
检查,但没有结果。尽管 /works
确实有效,但我不想为架构中的每个可选默认值重复相同的 body
语句两次。
有人知道如何解决这个问题吗?
最佳答案
问题是可选
验证器只是 completely ignores如果值为未定义
,则验证链。
您必须决定是否需要 children
字段作为默认值 []
,即使它在正文中完全缺失。然后删除可选
。或者您可以不使用它继续,然后删除 default
。
关于javascript - Express-validator 的默认 sanitizer 在链接时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68187700/