Вы можете проверить свою полезную нагрузку с помощью опции проверки маршрута хапи Это обозначение.
validate: {
payload: async (value, options) => {
}
}
Вот объяснение
функция проверки с использованием асинхронной функции подписи (значение, опции), где:
value - объект request.payloadсодержит параметры запроса запроса.
options - options.
если возвращается значение, оно используется в качестве нового значения request.payload, а исходное значение сохраняется в request.orig.payload.
В противном случае полезная нагрузка остается без изменений.Если выдается ошибка, ошибка обрабатывается в соответствии с failAction.
Вот пример кода для вашего приложения, это всего лишь пример дампа, но я надеюсь, что вы можете понять идею здесь.Вы можете проверить полезную нагрузку, объект запроса и параметры индивидуально в каждом запросе.Просто передайте валидатор Joi или функцию для проверки входящих данных.
const routeConfig = {
method: 'POST',
path: '/requestfriend',
config: {
auth: 'jwt',
validate: {
payload: async (value, options) => {
// extract recipient data from payload
const {recipient} = value;
// you can now validate your recipient
const result = Joi.validate({recipient}, Joi.string().required().error(new Error('recipient is required')), {abortEarly: false});
if(result.error) throw Boom.badRequest(result.error);
// there is no request object here, you have to dig in options.context parameter
// this is how it's look like
// {
// context:
// {
// headers:
// {
// host: 'localhost:3009',
// 'user-agent': 'curl/7.54.0',
// accept: '*/*',
// 'content-length': '13',
// 'content-type': 'application/x-www-form-urlencoded'
// },
// params: {},
// query: {x: 'y'},
// auth:
// {
// isAuthenticated: false,
// isAuthorized: false,
// credentials: null,
// artifacts: null,
// strategy: null,
// mode: null,
// error: null
// },
// app: {route: {}, request: {}}
// },
// abortEarly: false
// }
// let's say we got id parameters here
const id = Helpers.extractUserId(options.context);
if(id !== recipient) throw Boom.badRequest('_id and recipient id should not match')
}
},
handler
}
}