Заголовки ответа ember-cli-mirage отсутствуют в объекте XHR

Пытаюсь понять несоответствие в ответе между использованием моего API и ember-cli-mirage.

У меня есть обработчик, ожидающий ответа на запрос POST для аутентификации пользователя. Ожидаемые параметры обработчика: response, status и xhr:

(e.g. .then(function(response, status, xhr) {...}).

Используя свой API, я получаю то, что и ожидал: ответ — это данные, статус — это текст состояния, а xhr — это объект xhr. Однако при использовании ember-cli-mirage все попадает под ответ (вроде), а статус и xhr не определены.

Ниже приведены фрагменты моего кода:

mirage/config.js

this.post(URI.AUTH_SIGN_IN, function(db, request) {
  const responseHeaders = {
    'access-token': 'abcxyz123',
    'client': 'foobarbaz',
    'token-type': 'Bearer',
    'expiry': '1497364419',
    'uid': '[email protected]'
  };

  const user = {
    data: { id: 1, type: 'user', attributes: { uid: '[email protected]', email: '[email protected]', name: 'John Doe', provider: 'email' } }
  };

  return new Mirage.Response( 200, responseHeaders, user );
});

аутентификаторы/devise.js

authenticate(identification, password) {
  ...
  this.makeRequest( credentials ).then(function(response, status, xhr) {
    // persists the five headers needed to send to devise-token-auth
    // with mirage; response = Response {type: "default", status: 200, ok: true, statusText: "OK", headers: Headers…}, status = undefined, xhr = undefined
    // with actual api; response = Object {data: Object}, status = "success", xhr = Object {readyState: 4, getResponseHeader: function, getAllResponseHeaders: function…}

    // As a result below will fail :( 
    // TypeError: Cannot read property 'getResponseHeader' of undefined
    var result = {
        'access-token': xhr.getResponseHeader( 'access-token' ),
        expiry:         xhr.getResponseHeader( 'expiry' ),
        tokenType:      xhr.getResponseHeader( 'token-type' ),
        uid:            xhr.getResponseHeader( 'uid' ),
        client:         xhr.getResponseHeader( 'client' )
      };
   });
}

Я считаю, что делаю все правильно, но я, как известно, ошибаюсь :). Буду признателен за любую оказанную помощь.


person Tom Doe    schedule 30.05.2017    source источник
comment
Есть новости об этом @TomDoe?   -  person Stéphane Bruckert    schedule 03.07.2017


Ответы (1)


Хм, я не уверен, почему makeRequest возвращает значение undefined для второго и третьего параметров.

Я сделал простой Twiddle, и аргументы кажутся правильными для getJSON:

https://ember-twiddle.com/70229e352f37b4e437ced8509a4415d9?openFiles=routes.application.js%2C

model() {
  return Ember.$.getJSON('/foo').then((data, response, object) => {
    return object.getAllResponseHeaders();
  });
}

Может быть что-то немного другое в том, как Pretender обрабатывает имитированный ответ, или в том, как работает makeRequest, поэтому я предлагаю начать с поиска.

person Sam Selikoff    schedule 31.05.2017
comment
Похоже, это результат ember-fetch github.com/simplabs/ember-simple-auth/blob/1.3.0/addon/. @marcoow ты не знаешь, может ли это быть виновником? Опять же, любая помощь очень ценится, ребята. Спасибо - person Tom Doe; 31.05.2017