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;
  };
};

Я не нашел другого решения, но если бы существовал лучший способ сделать это, я был бы признателен, если бы вы могли мне помочь.

Спасибо,

0 ответов

Другие вопросы по тегам