node.js - 如何处理 hapi 验证错误?

标签 node.js validation hapi.js joi

我有以下 hapi 的路线代码...

<小时/>
const routeConfig = {
  method: 'POST',
  path: '/user',
  config: {
    validate: {
      payload: {
        firstName: Joi.string().required(),
      }
    },
    handler
  }
}

因此,当我不传递 firstName 时,它会抛出这样的错误

{
    "statusCode": 400,
    "error": "Bad Request",
    "message": "child \"firstName\" fails because [\"firstName\" is required]",
    "validation": {
        "source": "payload",
        "keys": [
            "firstName"
        ]
    }
}

现在,我需要在catch中处理上述错误

const handler = async(request, reply) => {
  try {
    const payload = request.payload
    const createUser = await User.create(payload)
    let token = Helpers.createJwt(createUser) 
    reply({ success: true, message: 'User created successFully', token })
  } catch(err) {
     // need to do something here to handle the error like
     if (err) {
       reply ({ error: "firstName is required", message: "Signup unsuccessfull" })
     }
  }
}

最佳答案

有一个更好的解决方案:

config: {
        validate: {
            payload: {
                firstName: Joi.string().required(),
            },
            failAction(request, reply, source, error) {
              reply({
                error: 'badRequest',
              }).code(400);
            },
        },
    },

如果Joi验证失败,它将触发failAction,您将能够处理错误(将其发送到日志服务和/或返回特定消息)。

它在文档中有点隐藏,但这里是 the relevant part

我必须承认,我没有用 hapi 17 尝试过......

关于node.js - 如何处理 hapi 验证错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50323782/

相关文章:

node.js - 请求 : How to set user agent for every request?

node.js - 来自node.js的@type for "exported modules"和良好的文档描述?

json - 远程传输 session 在提供正确的 session ID 后没有响应

node.js - 实验室和 getConfig 集成

hapi.js - hapijs joi 验证,验证大于其他属性的总和

node.js - 使用服务器方法进行内存缓存中的 Hapi 不接受对象作为参数

node.js - 简单的 nodeJS 示例不适用于 socket.io

c# - 类数据验证的实现

c# - WPF 文本框中正则表达式的用户输入验证

javascript - 外部 Javascript 文件无法正常工作,需要帮​​助