亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Express-Validator 自動生成的錯誤消息

Express-Validator 自動生成的錯誤消息

料青山看我應如是 2021-10-29 17:04:16
我想創建一個 Express API 并使用express-validator. 目前這是我的驗證中間件protected validate = async (request: Request, response: Response, next: NextFunction): Promise<void> => {    const validationErrors: Result<ValidationError> = validationResult(request);    if (!validationErrors.isEmpty()) {        response.status(422).json({ errors: validationErrors.array() });    } else {        next();    }};我的基本驗證設置看起來像public persist = [    body('username')        .isString()        .withMessage('username must be of type string.')        .isLength({ min: 1 })        .withMessage('username must be at least one character long.')        .exists()        .withMessage('username is required.'),    body('password')        .isString()        .withMessage('password must be of type string.')        .isLength({ min: 1 })        .withMessage('password must be at least one character long.')        .exists()        .withMessage('password is required.'),    this.validate,];當我調用POST /users以創建新用戶時,我會收到有關無效輸入的詳細錯誤響應。當我刪除所有自定義錯誤消息時,我收到此響應[    {        "msg": "Invalid value",        "param": "username",        "location": "body"    },    {        "msg": "Invalid value",        "param": "password",        "location": "body"    }]有沒有辦法獲得自動生成的錯誤消息,還是我真的必須自己編寫這些錯誤消息?
查看完整描述

2 回答

?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

基本上,驗證器試圖告訴您它認為在哪里發現了錯誤,并且由于它沒有自定義錯誤字符串,因此它退回到(相當丑陋的)“元素/位置”方案。


方法一

最合理的方法是為每個字段設置自定義錯誤消息??吹藉e誤消息相當重復,將它們移出驗證器定義是有意義的,并且可能創建一個非常簡單的“getter”函數來執行一些基本模板。然后,您的代碼會變得更好一些:


const MSG_TYPE_STR = '{{field}} must be of type string.'


function getMessage(fieldName: string, msgID: string): string {

   // Templating magic happens here, Regex or whatever other method you prefer

}

...


body('username')

        .isString()

        .withMessage(getMessage('username', MSG_TYPE_STR)


....

這樣,您仍然會收到格式很好的錯誤消息,并且您不會一遍又一遍地復制粘貼相同的字符串


方法二

可以想象,您可以為驗證錯誤添加后處理(即采用丑陋的輸出并進行一些計算并將其轉換為更好的輸出)。這將是一種相當困難的方法,因為您必須將規則分解為原子檢查,并且您的驗證方案變得很長,但仍然需要大量工作


方法三

這與其說是一種“方法”,不如說是一種建議 - 您可以切換到不同的驗證器,例如 Joi,它在錯誤消息周圍具有更合理的默認邏輯


查看完整回答
反對 回復 2021-10-29
?
元芳怎么了

TA貢獻1798條經驗 獲得超7個贊

只想再提一個機會。傳遞給客戶端的錯誤鍵碼。例子:

用戶名太短

這可以在客戶端處理,如果您決定在某個時候為您的應用程序添加本地化,這將非常有用。您將在前端有一個鍵值對象,該對象根據用戶選擇的語言處理消息。

祝你好運!


查看完整回答
反對 回復 2021-10-29
  • 2 回答
  • 0 關注
  • 252 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號