【发布时间】:2021-09-12 04:41:18
【问题描述】:
我在使用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/express@4.17.12
express-validator@6.12.0
express@4.17.1
typescript@4.3.4
...给出这个输出:
/fails output: {}
/works output: {
"children": []
}
POST 两个请求的正文都是空的(我正在使用 Postman 进行测试)。
为什么会这样?我尝试过在optional、isArray 和default 之间进行检查,但没有结果。尽管 /works 可以正常工作,但我不想为架构中的每个可选默认值重复相同的 body 语句两次。
有人知道如何解决这个问题吗?
【问题讨论】:
标签: javascript node.js typescript express express-validator