2015-05-18 50 views
0

我有我自己的自定義驗證屬性,我想返回一個400響應類似於JOI.validation是在其他領域返回。這意味着除了錯誤和消息之外,我還想返回一個驗證屬性 - 以便客戶端可以知道哪個字段要突出顯示。如何返回一個驗證屬性的hapi答覆像Joi庫的方式

所以,與其這樣

{ 
    "statusCode": 400, 
    "error": "Bad Request", 
    "message": "phone validation error: invalid phone number" 
} 

我想這個

{ 
    "statusCode": 400, 
    "error": "Bad Request", 
    "message": "phone validation error: invalid phone number" 
    "validation": { 
    "source": "payload", 
     "keys": [ 
      "phone" 
     ] 

} 

回覆我如何添加驗證了高致病性禽流感的答覆?

我一直在做這一點 - 它一直沒有工作

 e.validation = 
     { 
      source: "payload", 
      keys: [ 
       "phone" 
      ] 
     } 
     reply(Boom.badRequest(e)); 

我也假設,我不能有穰自定義驗證,否則我會剛剛延長淳佳。但是,有沒有一個Joi驗證錯誤類型或對象,我可以在答覆中使用以獲取Joi,如我的響應中的對象結構。

順便說一句,我的手機驗證不是一個簡單的正則表達式,並有特殊情況,所以我不能使用內置正則表達式驗證程序的Joi。

回答

0

如果檢查通過boom.badRequest( '一些信息')返回的對象,你會得到:

{ data: null, 
    isBoom: true, 
    isServer: false, 
    output: 
    { statusCode: 400, 
    payload: 
     { statusCode: 400, 
     error: 'Bad Request', 
     message: 'some message' }, 
    headers: {} }, 
    reformat: [Function] } 

所以你實際上需要做的事情像

var errObj = Boom.badRequest(e); 
errObj.output.payload.validation = 
{ 
    source: "payload", 
    keys: [ 
    "phone" 
    ] 
} 
reply(errObj); 
0

試試這個:

var errObj = Boom.badRequest(e); 
errObj.validation = 
    { 
     source: "payload", 
     keys: [ 
      "phone" 
     ] 
    } 
reply(errObj); 
+0

這並沒有工作 - 哈皮好像絆倒了結果的驗證屬性,如果我手動填充它 – MonkeyBonkey

+0

也許y你應該在GitHub上提出一個問題。 – ZeMoon