【发布时间】:2019-06-04 08:06:33
【问题描述】:
管理员将创建用户,并在此过程中输入一些随机字符串作为密码。当管理员编辑现有用户时,他不需要输入任何密码,除非他想更改它。如果管理员不输入任何密码,则使用旧密码。
所以我尝试使用.when() 来处理这种情况。当payload中存在_id时(只有当用户存在时才有可能),那么我们应该将密码字段设为可选,否则需要密码。
这是我的 Joi 验证
const usersJoiSchema = Joi.object({
_id: Joi.string().optional(),
firstName: Joi.string().required(),
lastName: Joi.string().required(),
email: Joi.string().required(),
password: Joi.string().when('_id', { is: Joi.exist(), then: Joi.optional(), otherwise: Joi.required() })
})
Joi 在这种情况下有一个方法.when。但出于某种奇怪的原因,它给了我
{"statusCode":500,"error":"Internal Server Error","message":"An internal server error occurred"}
作为 api 的响应,服务器控制台中没有任何内容。
我尝试比较_id 的字符串长度而不是exists(),我也尝试过
password: Joi.string().when('_id', { is: Joi.string().required(), then: Joi.string().optional(), otherwise: Joi.string().required() }),
password: Joi.string().when('_id', { is: Joi.string(), then: Joi.string().optional(), otherwise: Joi.string().required() }),
对于密码密钥,但仍然是同样的问题。
如果有人对此问题有任何想法,请帮助我。
【问题讨论】:
-
500 错误毫无意义。您的应用程序日志中的错误是什么?
-
日志中没有错误,正如我在上面的描述中提到的。
标签: node.js validation schema hapijs joi