代码之家  ›  专栏  ›  技术社区  ›  Andre Mendes

使用Joi验证嵌套对象

  •  4
  • Andre Mendes  · 技术社区  · 9 年前

        {
        "email":"rambo@gmail.com",
        "password":"abc123",
        "active":"",
        "details": {
            "firstName": "Rambo",
            "lastName": "Comando",
            "phoneNumber": "5554446655",
            "billing":{
                "firstName": "",
                "lastName": "",
                "phoneNumber": "",
                "address": "",
                "adress2": "",
                "postalCode": "",
                "city": "",
                "state": "",
                "country": "",
                "stripeId": ""
            }
         }
      }
    

    我试着这样做,但不起作用。正确的做法是什么?

    payload: {
            email: Joi.string().email().required(),
            password: Joi.string().alphanum().min(8).max(30).required(),
            active: Joi.boolean(),
            details: Joi.object().keys({
                firstName: Joi.string().max(50),
                lastName: Joi.string().max(50),
                phoneNumber: Joi.number().integer().min(10).max(11),
                billing : Joi.object().keys({
                    firstName: Joi.string().max(50),
                    lastName: Joi.string().max(50),
                    phoneNumber: Joi.string().integer().min(10).max(11),
                    address: Joi.string().alphanum(),
                    adress2: Joi.string().alphanum(),
                    postalCode: Joi.string().alphanum(),
                    city: Joi.string(),
                    state: Joi.string(),
                    country: Joi.string(),
                    stripeId: Joi.string().alphanum()
                })
            })
        }
    

    我不确定我错过了什么。

    1 回复  |  直到 9 年前
        1
  •  3
  •   Damaged Organic    9 年前

    您的代码中有一个错误,在这一行:

    phoneNumber: Joi.string().integer().min(10).max(11),
    

    节点。js因此引发异常:

    如果你把它改成 string() number()

    phoneNumber: Joi.number().min(10).max(11),
    

    这很明显,所以我只是想知道,你怎么会错过它?您的Joi模式的其他一切似乎都很好。