Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用typescipt中的joi路径参数验证器发送自定义json响应_Javascript_Node.js_Typescript_Middleware_Joi - Fatal编程技术网

Javascript 使用typescipt中的joi路径参数验证器发送自定义json响应

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

我有一个带有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 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直接发送响应我不确定你现在想说什么。是的,如果有效负载无效,使用验证中间件意味着不调用响应处理程序;这就是重点。副本显示了如何自定义发送的响应。如果这对您来说还不够,也许不要使用中间件。