Почему loopback дает мне пустые ctx.options для хуков операций? - PullRequest
0 голосов
/ 10 октября 2018

эта проблема также передана на github: https://github.com/strongloop/loopback/issues/4024.

, в нашем приложении мы определили хук операции "перед сохранением".С его помощью мы намереваемся выполнить некоторые проверки запрашивающего пользователя.

Чтобы получить доступ к идентификатору запрашивающего пользователя, мы пытаемся получить его accessToken из optionsobject параметра context.Это делается в соответствии с официальными документами обратной связи (https://loopback.io/doc/en/lb3/Using-current-context.html#access-the-context-from-operation-hooks)

. Приведенный ниже код был уменьшен до минимальных значений для отладки:

Progress.observe('before save', function verifyAccessToken(ctx, next) {
        console.log('Executing before save');
        if (!ctx) {
            next(new Error('No ctx was passed to verifyMyUserExists'));
        }
        else if (!ctx.options) {
            console.log('Ctx is:');
            next(new Error('No options in ctx was passed to verifyMyUserExists'));
        }
        else if (!ctx.options.accessToken) {
            console.log('Options is:');
            console.log(ctx.options);
            next(new Error('No accessToken options in ctx was passed to verifyMyUserExists'));
        }
        else {
            next();
        }
    });

На этой неделе - без изменениявещь в коде - эта проверка больше не работает. На основании этого я узнал, что ctx.options является пустым объектом {} (см. полный журнал ошибок ниже). Из-за этого мы не можем получить доступ кaccessToken, конечно,

Мы выполнили некоторую диагностику и не смогли найти основную причину, почему ctx.options пуст.

  1. Мы используем ловушку для стандартных операций надпростые постоянные модели (НЕТ пользовательских методов. Просто основные вещи.)
  2. Мы убедились, что опции действительно введены (см. код выше и вывод ниже)
  3. Обратите внимание, что мы встроили другую модель впостоянная модель, в которой возникает ошибка. Но, насколько нам известно, это не должно вызывать проблем, как это было раньше.

Ожидаемый результат

Мы ожидаем, что параметр хука операции ctx будет заполнен полным объектом параметров, содержащим, по крайней мере, accessToken запрашивающего пользователя.

Есть какие-нибудь мысли по этому поводу?Я с нетерпением жду вашего ответа и любых идей.

Best, enosinger

Дополнительная информация

Мы используем Loopback 3. Мы наблюдаем ошибкуна наших локальных машинах и в Heroku приложение запускается как обычное приложение узла.

Полный журнал ошибок для ловушки операций:

Executing before save
Options is:
{}
Nicht verarbeiteter Fehler für Anforderung POST /api/progresses/?access_token=<XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX>: Error: No accessToken options in ctx was passed to verifyMyUserExists
    at verifyAccessToken (C:\Users\erosinger3\workspace_FitChallenger\Backend\common\models\progress.js:34:18)
    at notifySingleObserver (C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\loopback-datasource-juggler\lib\observer.js:160:22)
    at C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\async\dist\async.js:3096:16
    at replenish (C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\async\dist\async.js:998:17)
    at C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\async\dist\async.js:1002:9
    at eachLimit$1 (C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\async\dist\async.js:3182:24)
    at Object.<anonymous> (C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\async\dist\async.js:1032:16)
    at doNotify (C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\loopback-datasource-juggler\lib\observer.js:157:11)
    at doNotify (C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\loopback-datasource-juggler\lib\observer.js:155:49)
    at doNotify (C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\loopback-datasource-juggler\lib\observer.js:155:49)
    at doNotify (C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\loopback-datasource-juggler\lib\observer.js:155:49)
    at Function.ObserverMixin._notifyBaseObservers (C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\loopback-datasource-juggler\lib\observer.js:178:5)
    at Function.ObserverMixin.notifyObserversOf (C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\loopback-datasource-juggler\lib\observer.js:153:8)
    at Function.ObserverMixin._notifyBaseObservers (C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\loopback-datasource-juggler\lib\observer.js:176:15)
    at Function.ObserverMixin.notifyObserversOf (C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\loopback-datasource-juggler\lib\observer.js:153:8)
    at Function.ObserverMixin._notifyBaseObservers (C:\Users\erosinger3\workspace_FitChallenger\Backend\node_modules\loopback-datasource-juggler\lib\observer.js:176:15)

Извините, пожалуйста, немецкие сообщения об ошибках.Я не знаю, почему они были локализованы после того, как я сегодня обновил VS Code ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...