Я разделил ввод данных в вызове REST на 4 части. Данные могут быть отправлены на вызов REST через: -
- заголовки
- параметры запроса
- параметры пути
- тело запроса
Итак, чтобы проверить наличие любого ключа в любой из четырех вышеупомянутых частей, я создал схему в этом формате. Поэтому, если мне нужно проверить что-либо в параметрах запроса, я добавлю ключ 'query', а затем добавлю поля внутри него, которые необходимо проверить.
const schema = {
id: 'Users_login_post',
type: 'object',
additionalProperties: false,
properties: {
headers: {
type: 'object',
additionalProperties: false,
properties: {
Authorization: {
type: 'string',
minLength: 10,
description: 'Bearer token of the user.',
errorMessages: {
type: 'should be a string',
minLength: 'should be atleast of 23 length',
required: 'should have Authorization'
}
}
},
required: ['Authorization']
},
path: {
type: 'object',
additionalProperties: false,
properties: {
orgId: {
type: 'string',
minLength: 23,
maxLength: 36,
description: 'OrgId Id of the Organization.',
errorMessages: {
type: 'should be a string',
minLength: 'should be atleast of 23 length', // ---> B
maxLength: 'should not be more than 36 length',
required: 'should have OrgId'
}
}
},
required: ['orgId']
}
}
};
Теперь в моем экспресс-коде я создал объект запроса, чтобы проверить правильность JSON в этом формате.
router.get("/org/:orgId/abc", function(req, res){
var request = { //---> A
path: {
orgId : req.params.orgId
},
headers: {
Authorization : req.headers.Authorization
}
}
const Ajv = require('ajv');
const ajv = new Ajv({
allErrors: true,
});
let result = ajv.validate(schema, request);
console.log(ajv.errorsText());
});
И я проверяю вышеупомянутый объект запроса (в A) по моей схеме, используя AjV.
Результат, который я получаю, выглядит примерно так:
data/headers should have required property 'Authorization', data/params/orgId should NOT be shorter than 23 characters
Теперь у меня есть список проблем:
- почему сообщение показывает слово data в data / headers и data / params / orgId, даже если имя моей переменной - request < / сильный> (в А)
- Также почему не используются мои сообщения об ошибках, как в случае с orgId, о котором я упоминал: должно быть не менее 23 длины (в точке B) в качестве сообщения , даже после этого пришло сообщение НЕ должно быть короче 23 символов.
- Как показать запрос / заголовки вместо данных / заголовков.
Кроме того, способ, которым я проверял свои параметры пути, параметры запроса, параметры заголовка, параметр тела, правильный ли это, если нет, то что может быть лучшим способом сделать то же самое?
Пожалуйста, пролей немного света.
Заранее спасибо.