我试图通过promises和http.get来处理登录,但是我失败了,我得到了以下错误:
对象不支持属性或方法' toPromise'
我的代码是:
return this.http.get('http://localhost:5000/login/', {
headers: authHeader
}).map((response) => {
return response.json()
}).toPromise(null);
我得到了:
更新:
JohnPapa将他的项目更新为我的朋友
https://github.com/johnpapa/angular2-there-and-back-again/blob/master/app/core/character.service.ts
答案 0 :(得分:6)
我想知道你是否真的使用了promise,因为Angular的HTTP支持依赖于Observables。
要获得回复,您只需要为您的通话返回observable:
getSomething() {
return this.http.get('http://localhost:5000/login/', {
headers: authHeader
}).map((response) => {
return response.json()
})
}
调用该方法时,您可以使用subscribe
方法注册回调:
getSomething().subscribe(
data => handleData(data),
err => reject(err));
如果你真的想使用promises(使用toPromise
方法),你应该导入:
import 'rxjs/Rx';
有关详细信息,请参阅此问题:Apple documentation。
否则,FYI调用与浏览器中的HTTP不同步...
希望它可以帮到你, 亨利
答案 1 :(得分:0)
如果需要,可以为 sync-request 库使用TypeScript包装器。
此TypeScript强类型,流畅的包装库是 ts-sync-request 。
使用此库,您可以进行如下同步HTTP调用:
您的TypeScript类:
class Request
{
Email: string;
}
class Response
{
isValid: boolean;
}
在项目中安装软件包:
npm i ts-sync-request
然后
import { SyncRequestClient } from 'ts-sync-request/dist'
获取:
let email = "jdoe@xyz.com";
let url = "http://localhost:59039/api/Movies/validateEmail/" + email;
var response = new SyncRequestClient()
.addHeader("Authorization", "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NDc2OTg1MzgsIm5iZiI6MTU0NzY5NDIxOCwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvbmFtZSI6InN0cmluZyIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd3MvMjAwOC8wNi9pZGVudGl0eS9jbGFpbXMvcm9sZSI6InN0cmluZyIsIkRPQiI6IjEvMTcvMjAxOSIsImlzcyI6InlvdXIgYXBwIiwiYXVkIjoidGhlIGNsaWVudCBvZiB5b3VyIGFwcCJ9.qxFdcdAVKG2Idcsk_tftnkkyB2vsaQx5py1KSMy3fT4")
.get<Response>(url);
POST :
let url = "http://localhost:59039/api/Movies/validateEmailPost";
let request = new Request();
request.Email = "jdoe@xyz.com";
var response = new SyncRequestClient()
.addHeader("Authorization", "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NDc2OTg1MzgsIm5iZiI6MTU0NzY5NDIxOCwiaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNS8wNS9pZGVudGl0eS9jbGFpbXMvbmFtZSI6InN0cmluZyIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vd3MvMjAwOC8wNi9pZGVudGl0eS9jbGFpbXMvcm9sZSI6InN0cmluZyIsIkRPQiI6IjEvMTcvMjAxOSIsImlzcyI6InlvdXIgYXBwIiwiYXVkIjoidGhlIGNsaWVudCBvZiB5b3VyIGFwcCJ9.qxFdcdAVKG2Idcsk_tftnkkyB2vsaQx5py1KSMy3fT4")
.post<Request, Response>(url, request);
希望这会有所帮助。