Feathersjs: бесконечный цикл перед тем, как получить хук
Я ссылаюсь на этот вопрос, потому что это решило мою проблему. Как избежать многократного запуска сервиса в перехвате с использованием feathers.js?
Однако, как упоминается в ответе Даффа, "сервисный метод в идеале не должен вызывать себя в хуке". Поэтому я ищу другое решение для моей проблемы:
У меня есть заказ на обслуживание, вот часть результата для метода поиска
{
"_id": "5ae9d8254964a83e806754f2",
"confirmed": 0,
"order_number": "2",
"producer": "5adf309435062e0a68485a15"
}
Для метода get order я хочу убедиться, что текущий аутентифицированный пользователь имеет тот же _id, что и поле "provider" в коллекции заказов. Если да, то нет проблем, если нет, выведите ошибку.
Чтобы сделать это, я создаю Hook, в котором я вызываю метод get с context.id, который будет возвращать данные документа, включая "продюсер". Затем я сравниваю производителя с user_id.
module.exports = function (options = {}) {
return async context => {
const { app, data, params } = context;
const { user } = context.params;
// Get all order inforamtions,
const order = await app.service('orders').get(context.id, params);
if(JSON.stringify(user._id) != JSON.stringify(order.producer))
{
throw new Error('No access');
}
return context;
};
};
Итак, в конце концов, у меня есть бесконечный цикл, я вызываю get in get hook.
Как я уже сказал, я нашел решение с вышеуказанным вопросом.
module.exports = function (options = {}) {
return async context => {
const { app, data, params } = context;
const { user } = context.params;
if(!params.fromOtherHook)
{
params.fromOtherHook = true;
// Get all orders inforamtion for this one,
const order = await app.service('orders').get(context.id, params);
if(JSON.stringify(user._id) != JSON.stringify(order.producer))
{
throw new Error('Vous ne pouvez pas modifier ces informations');
}
}
return context;
};
};
Я не нашел другого решения, но если бы существовал лучший способ сделать это, я был бы признателен, если бы вы могли мне помочь.
Спасибо,