我在這樣的陣列中有我的欄位名稱:
const baseFields = [
'employeeNumber',
'firstName',
'lastName',
'trEmail',
'position'
];
這些是我只需要關心被驗證的輸入欄位。
在請求正文中,我收到一個物件陣列。例子:
{employeeNumber: 12343,
firstName: Will,
lastName: Smith,
trEmail: smith@will.com,
position: Actor,
salary: low
},
{employeeNumber: 12344,
firstName: Chris,
lastName: Rock,
trEmail: rock@chris.com,
position: stuntman,
salary: ''
}
我想僅使用陣列中的關注欄位來驗證此baseFields陣列。
這是我當前的驗證器代碼。我發現我可以使用通配符來驗證陣列。
const existsOptions = {
checkNull: true,
checkFalsy: true
};
const postRequiredFields = () => {
const validators = [];
const validator = body('*.*')
.exists(existsOptions)
.bail()
.isString();
validators.push(validator);
return validators;
};
使用const validator = body('*.*')它將檢查正文中物件陣列中的所有欄位。因為我可以收到此訊息:
{ value: '',
msg: 'Invalid value',
param: '[1].salary',
location: 'body' }
你看,salary正在檢查欄位。它回傳無效值,因為陣列中的第二個索引將薪水設定為 '' 或為空。但同樣,薪水欄位不是我需要驗證的欄位之一。
所以我嘗試了這樣body('baseFields*.*')的方法來檢查整個物件陣列,但只檢查關注欄位,但它不起作用。我在網上找不到適合我的場景的通配符模式。檔案也說得很少。
uj5u.com熱心網友回復:
要檢查陣列中的物件,請使用:*.key
然后你可以回圈你的鍵并動態添加它們:
const postRequiredFields = () => {
const validators = [];
baseFields.map((key) => {
const validator = body(`*.${key}`)
.exists(existsOptions)
.bail()
.isString();
validators.push(validator);
});
return validators;
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/456750.html
標籤:javascript 节点.js 形式 表示 快速验证器
