Хук Loopback Operation получает опции как пустые - PullRequest
0 голосов
/ 02 января 2019

Я постараюсь объяснить эту странную ситуацию настолько просто, насколько смогу.

Я создал хук операции "before save" и сделал его в mixin, чтобы добавить его к некоторым моделям.

этот миксин использует context.options, чтобы получить текущий userId, чтобы что-то сделать.

этот миксин работает отлично, если я вызываю операцию напрямую (например, POST /Accounts).

Но если я вызываю его внутри удаленного метода, context.options будет пустым, например, если у нас есть метод с именем POST /Accounts/Signup, а внутри него мы вызываем Account.create(...), хук "before save" получает options как empty object {}

Здесь находится проект песочницы https://github.com/mustafamagdy/loopback-sandbox-issue

Фрагмент кода миксина выглядит следующим образом:

module.exports = function(Model, options) {
  Model.observe("before save", async function(ctx) {
    if (ctx.instance.id) return;

    const userId = ctx.options && ctx.options.accessToken && ctx.options.accessToken.userId;

    if (userId) {
      //... do stuff
    }
    else 
    {
      console.error("Failed to scope " + Model.name + " to user (null)");
    }
  });
};

1 Ответ

0 голосов
/ 03 января 2019

После расследования я обнаружил эту проблему , в которой говорится о похожем поведении, однако комментарии очень деструктивны. Поэтому я хочу написать заключение для тех, кто сталкивается с той же проблемой.

Loopback требует от вас передачи опций, которые вы объявили из удаленного метода, в метод (ы) модели, если вы хотите получить его на хуке операций, поэтому я в итоге так и сделал.

module.exports = function(Note) {
  Note.makeNew = makeNew;

  async function makeNew(options) {
    await Note.create(obj, options);
  }
};
...