[英]Refactoring hapi configs with joi validation
我有hapi路由配置,其中包含驗證,並且我想將此驗證從config移到帶有此模型驗證的文件。 例如,針對用戶的PATCH:
const routeConfig = {
method: 'PATCH',
path: '/users/{id}',
config: {
...
validate: {
params: {
id: Joi.string().required()
},
payload: {
email: Joi.string().email().optional(),
password: Joi.string().optional(),
fieldA: Joi.string().optional(),
fieldB: {
fieldB1: Joi.string().optional(),
fieldB2: Joi.string().optional(),
fieldB3: Joi.string().uri().optional(),
fieldB4: Joi.string().uri().optional(),
fieldB5: {
fieldB6: Joi.string().optional(),
fieldB7: Joi.string().optional(),
fieldB8: Joi.string().optional()
}
}
}
},
handler
}
}
在POST上:
const routeConfig = {
method: 'POST',
path: '/users',
config: {
...
validate: {
email: Joi.string().email().required(),
password: Joi.string().required(),
confirmPassword: Joi.string().required()
},
handler
}
}
您如何看到,用於創建和更新使用過的不同字段。 另外,我有與其他模型相關的路線,如下所示:
const routeConfig = {
method: 'PUT',
path: '/users/{id}/updateRelated',
config: {
validate: {
params: {
id: Joi.string().required()
},
payload: {
relatedId: Joi.string().required(),
relatedModelFieldA: Joi.string().required(),
relatedModelFieldB: Joi.string().required(),
relatedModelFieldC: Joi.string().required(),
... 10 fields
}
}
}
}
僅對於模型,我可以轉到具有以下結構的驗證器:
const validationSchemas = {
'post-users': {
payload: ...
}
'patch-users': {
params: ...,
payload: ...
},
...
}
但是如何包括相關路線? 因為用於PUT updateRelated的有效負載等效於此相關模型上的PUT(例如:PUT / users / {user_id} / modelA等效PUT / modelA / {modelA_id})
同樣,另一個端點可以接收用戶模型的數據。 例如:/ me / coords可以更新用戶模型中的coords字段,其中有效負載將僅包含緯度和經度類型。
謝謝!
為您的ID驗證創建導出,該導出在多個路由(例如,
const Joi = require('joi');
module.exports = Joi.object({
id: Joi.string().required()
});
然后為每個不同的有效負載驗證創建一個導出。 即
const Joi = require('joi');
module.exports = Joi.object({
email: Joi.string().email().optional(),
password: Joi.string().optional(),
fieldA: Joi.string().optional(),
fieldB: {
fieldB1: Joi.string().optional(),
fieldB2: Joi.string().optional(),
fieldB3: Joi.string().uri().optional(),
fieldB4: Joi.string().uri().optional(),
fieldB5: {
fieldB6: Joi.string().optional(),
fieldB7: Joi.string().optional(),
fieldB8: Joi.string().optional()
}
}
});
然后在您的路線中要求它們,並將它們用作validate對象的一部分。 即
const idParamsSchema = require('./id-param-schema');
const payloadSchema = require('./payload-schema');
...
const routeConfig = {
method: 'PUT',
path: '/users/{id}/updateRelated',
config: {
validate: {
params: idParamsSchema,
payload: payloadSchema
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.