Получить User-Agent и часовой пояс в миксин - PullRequest
0 голосов
/ 20 мая 2019

Я создаю миксин для модели на крюке 'create'. Я хочу получить доступ к пользовательскому агенту и информации о часовом поясе пользователя.

Я также пытался использовать LoopBackContext. Но это не большая помощь, так как я не смог найти объект, содержащий эту информацию.

var loopBackContext = require('loopback-context');

module.exports = function Request(Model, options) {
  Model.observe('access', function event(ctx, next) {
   var httpContext = loopBackContext.getCurrentContext();
    //access user-agent and timezone
    next();
  });
};

1 Ответ

0 голосов
/ 31 мая 2019

Обратите внимание, что loopback-context работает не очень надежно, мы рекомендуем передавать контекст через options объект, как объяснено в https://loopback.io/doc/en/lb3/Using-current-context.html.

Аргумент ctx, передаваемый хукам операций, таким как access, является еще одним типом объекта контекста, см. Документацию по Хукам операций .

Чтобы получить доступ к дополнительным заголовкам запроса, вы также должны переопределить метод createOptionsFromRemotingContext модели, см. https://loopback.io/doc/en/lb3/Using-current-context.html#override-createoptionsfromremotingcontext-in-your-model

module.exports = function Request(Model, options) {
  Model.createOptionsFromRemotingContext = function(ctx) {
    const base = this.base.createOptionsFromRemotingContext(ctx);
    return {
      ...base,
      userAgent: req.headers['user-agent'],
      // etc.
    };
  });

  Model.observe('access', function event(ctx, next) {
    const options = ctx.options || {};
    // options contains data created by Model.createOptionsFromRemotingContext
    // but only when invoked via REST API.
    // when called from JavaScript (e.g. from unit-tests), options are exactly
    // as provided by the caller (often undefined).
    const userAgent = ctx.options && ctx.options.userAgent;
    // access user-agent and timezone
    next();
  });
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...