2 回答

TA貢獻(xiàn)1789條經(jīng)驗 獲得超8個贊
基本上,驗證器試圖告訴您它認(rèn)為在哪里發(fā)現(xiàn)了錯誤,并且由于它沒有自定義錯誤字符串,因此它退回到(相當(dāng)丑陋的)“元素/位置”方案。
方法一
最合理的方法是為每個字段設(shè)置自定義錯誤消息??吹藉e誤消息相當(dāng)重復(fù),將它們移出驗證器定義是有意義的,并且可能創(chuàng)建一個非常簡單的“getter”函數(shù)來執(zhí)行一些基本模板。然后,您的代碼會變得更好一些:
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)
....
這樣,您仍然會收到格式很好的錯誤消息,并且您不會一遍又一遍地復(fù)制粘貼相同的字符串
方法二
可以想象,您可以為驗證錯誤添加后處理(即采用丑陋的輸出并進(jìn)行一些計算并將其轉(zhuǎn)換為更好的輸出)。這將是一種相當(dāng)困難的方法,因為您必須將規(guī)則分解為原子檢查,并且您的驗證方案變得很長,但仍然需要大量工作
方法三
這與其說是一種“方法”,不如說是一種建議 - 您可以切換到不同的驗證器,例如 Joi,它在錯誤消息周圍具有更合理的默認(rèn)邏輯

TA貢獻(xiàn)1798條經(jīng)驗 獲得超7個贊
只想再提一個機(jī)會。傳遞給客戶端的錯誤鍵碼。例子:
用戶名太短
這可以在客戶端處理,如果您決定在某個時候為您的應(yīng)用程序添加本地化,這將非常有用。您將在前端有一個鍵值對象,該對象根據(jù)用戶選擇的語言處理消息。
祝你好運!
添加回答
舉報