Javascript 使用typescipt中的joi路径参数验证器发送自定义json响应
我有一个带有GET方法的route,它在url路径中接受一个id参数。我正在用正则表达式验证该id。我可以用下面的代码成功验证Javascript 使用typescipt中的joi路径参数验证器发送自定义json响应,javascript,node.js,typescript,middleware,joi,Javascript,Node.js,Typescript,Middleware,Joi,我有一个带有GET方法的route,它在url路径中接受一个id参数。我正在用正则表达式验证该id。我可以用下面的代码成功验证 const validate = require("express-joi-validate"); router.get("/finderrorlog/:id", validate(errorLogSchema),async (req: Request, res: Response) => { try { // Yes, it's a valid
const validate = require("express-joi-validate");
router.get("/finderrorlog/:id", validate(errorLogSchema),async (req: Request, res: Response) => {
try {
// Yes, it's a valid ObjectId, proceed with `findById` call.
let result = await errlogsvc.GetErrroLogDetails(req.params.id);
res.json({
status: true,
result: result,
});
} catch (e) {
console.log(e);
logger.error(e);
res.json({ status: false, error: e });
}
});
要验证的架构
export const errorLogSchema = {
params: {
id: Joi.string()
.pattern(new RegExp('^[0-9a-fA-F]{24}$'))
}
}
但这里的问题是,catch
从未执行过。我想要这样的回应
{
"status" : false,
"error: " id did not match te pattern"
}
但我得到的错误是
{
"message": "'params.id' with value '5b43c4qfk4e0f07c381392' fails to match the required pattern: /^[0-9a-fA-F]{24}$/",
"field": "params.id"
}
如何根据我的要求获得自定义响应?我找到了一个解决方案,通过该解决方案,我不必使用
验证(errorLogSchema)
,并且仍然可以验证数据
传递请求参数
const reqObject = findErrorLogRequestSchema.validate(req.params);
定义模式
export const findErrorLogRequestSchema = Joi.object({
id: Joi.string()
.pattern(new RegExp('^[0-9a-fA-F]{24}$')).message("Id is not valid")
});
如果在中间件中验证失败,则路由处理程序回调永远不会被调用。这是否回答了您的问题?请仔细阅读副本,这些答案不仅仅适用于邮件。我的问题是不同的。我绕过我的响应处理程序,直接发送响应。我无法控制joi直接发送响应我不确定你现在想说什么。是的,如果有效负载无效,使用验证中间件意味着不调用响应处理程序;这就是重点。副本显示了如何自定义发送的响应。如果这对您来说还不够,也许不要使用中间件。