试图理解使用我的api与ember-cli-mirage之间的反应不一致。
我有一个处理程序正在等待POST请求的响应以验证用户。处理程序的预期参数为response
,status
和xhr
:
(例如.then(function(response, status, xhr) {...}
)。
使用我的API我收到了我所期望的 - 响应是数据,状态是statusText,xhr是xhr对象。然而,使用ember-cli-mirage,一切都在响应(种类),状态和xhr都是未定义的。
我的代码片段如下:
蜃/ config.js
this.post(URI.AUTH_SIGN_IN, function(db, request) {
const responseHeaders = {
'access-token': 'abcxyz123',
'client': 'foobarbaz',
'token-type': 'Bearer',
'expiry': '1497364419',
'uid': 'user@example.com'
};
const user = {
data: { id: 1, type: 'user', attributes: { uid: 'user@example.com', email: 'user@example.com', 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' )
};
});
}
我相信我正确地做到了,但我知道错了:)。非常感谢任何帮助。
答案 0 :(得分:0)
嗯,我不确定为什么makeRequest
返回未定义的第二和第三个参数。
我制作了一个简单的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
如何工作可能会略有不同,所以我建议先从那里开始。