Пытаюсь понять несоответствие в ответе между использованием моего 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' )
};
});
}
Я считаю, что делаю все правильно, но я, как известно, ошибаюсь :). Буду признателен за любую оказанную помощь.