Joi,将空字符串转换为null

Roy*_*son 4 node.js joi

我有以下规则:Joi.string().empty("").default(null)

我假设这个规则会转换一个空字符串""为 null,但情况似乎并非如此。

我如何获得所需的行为?

Dan*_*n D 6

如果规则应用于非必填字段,则略有不同。

使用empty(""):如果请求提供了""值,它将被替换为undefined

使用default(null):意味着如果该值是,undefined它将被替换为null- 请注意,如果请求中根本没有提供值,它也会被替换undefined

因此,您的示例将接受任何字符串,但如果值为 ,""它将被替换为undefined,然后如果值为 ,undefined它将被替换为null

因此,该值将始终适用null每个""请求,除非提供了其他字符串。

undefined如果您希望在请求未提供值时保留该值,则需要类似以下内容:

Joi.alternatives()
  .try(
    Joi.string().valid('').empty('').default(null), // accept only empty strings and convert those to null
    Joi.string() // accept every other string
  )
Run Code Online (Sandbox Code Playgroud)

这样,如果请求值是字符串,它将被接受,除非它是字符串,""否则它将被转换为null. 否则,如果请求未为该字段提供任何值,则该值将保留undefined