javascript - Express-validator 的默认 sanitizer 在链接时不起作用

标签 javascript node.js typescript express express-validator

我在使用 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 来测试这一点)。

为什么会发生这种情况?我尝试过使用 可选isArraydefault 检查,但没有结果。尽管 /works 确实有效,但我不想为架构中的每个可选默认值重复相同的 body 语句两次。

有人知道如何解决这个问题吗?

最佳答案

问题是可选验证器只是 completely ignores如果值为未定义,则验证链。

您必须决定是否需要 children 字段作为默认值 [],即使它在正文中完全缺失。然后删除可选。或者您可以不使用它继续,然后删除 default

关于javascript - Express-validator 的默认 sanitizer 在链接时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68187700/

相关文章:

javascript - 如何告诉 chrome.app.window 在 Windows 下的特定屏幕上打开?

javascript - 使用 jQuery 重新加载对象并间隔触发函数

node.js - 长期使用的前端项目框架中出现巨大的 Node/NPM 崩溃

TypeScript:将 T 的所有可选属性断言为非可选

typescript - 如何在 Typescript 中对相关属性进行建模

javascript - 从字符串javascript中删除字符的更简单方法

node.js - 使用 EJS 时,来自 mongodb 的数据未显示在 View 中

node.js - Visual Studio Code - 通过 "Attach"进行调试在 Mac OS 上不起作用

typescript - 为什么 `declare` 文件中使用了 `d.ts` 字

javascript - 我怎样才能在前面画一个层,但在后面让它可以选择?