Node.js 使用Joi验证嵌套对象

Node.js 使用Joi验证嵌套对象,node.js,api,hapijs,joi,Node.js,Api,Hapijs,Joi,如何使用joi验证此对象?我正在使用Joi和Hapi api { "email":"rambo@gmail.com", "password":"abc123", "active":"", "details": { "firstName": "Rambo", "lastName": "Comando", "phoneNumber": "5554446655", "billing":{

如何使用joi验证此对象?我正在使用Joi和Hapi api

    {
    "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()
            })
        })
    }

我不确定我在哪里漏掉了东西。

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

phoneNumber: Joi.string().integer().min(10).max(11),
Node.js引发异常,因为它:

TypeError:Joi.integer不是函数

如果您将其更改为
string()
number()
一切都将正常工作:

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

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

您能指定“不工作”是什么意思吗?@KidBinary hey,它根本不会运行我的node.js应用程序。这个验证中存在问题,因为我有很多其他对象,但不是像这样的嵌套对象。它会引发Node.js异常、Joi验证错误,或者干脆忽略您试图用它验证的负载?@KidBinary我修复了电话号码,但仍然不起作用。我在我的Hapi路由器上使用它。很高兴能帮助:)