2017-09-09 156 views
1

我想在angular2中做一個POST註冊服務,但它不能很好地工作。 因此,這裏是我的user.tsAngular 2:Http POST錯誤

export class User { 
    id:number; 
    name:string; 
    email:string; 
    birthDate:Date; 
} 

然後signup.service.ts

import { Injectable } from '@angular/core'; 
import { Http, Response, Headers, RequestOptions } from '@angular/http'; 
import { Observable } from 'rxjs/Observable'; 
import { User } from "../../models/user"; 

@Injectable() 
export class SignupService { 
    url: string = 'http://localhost:8080/signup'; 

    constructor(private http: Http) { } 

    createUser(user: User): Observable<any> { 
    let headers = new Headers({ 'Content-Type': 'application/json' }); 
    let options = new RequestOptions({ headers: headers }); 
    return this.http 
     .post(this.url, user, options) 
     .map(this.extractData) 
     .catch(this.handleErrorObservable); 
    } 
    private extractData(res: Response) { 
    let body = res.json(); 
    return body.data || {}; 
    } 
    private handleErrorObservable(error: Response | any) { 
    console.error(error.message || error); 
    return Observable.throw(error.message || error); 
    } 
} 

最後signup.component.ts

import { Component } from '@angular/core'; 
import {Router} from "@angular/router"; 
import { User } from "../../models/user"; 
import { SignupService } from "../../services/signup/signup.service"; 

@Component({ 
    selector: 'signup', 
    templateUrl: './signup.component.html', 
    styleUrls: ['./signup.component.css'] 
}) 

export class SignupComponent { 

    user: User = { 
    id:0, 
    name:'Test', 
    email:'[email protected]', 
    birthDate: new Date() 
    }; 

    constructor(private signupService: SignupService) { } 

    addUser():void { 
    this.signupService.createUser(this.user) 
    .subscribe(u => this.user = u); 
    } 
} 

我得到的錯誤是:

src/app/services/signup/signup.service.ts(27,12)中的錯誤:類型參數'T'的參數類型 無法從使用情況中推斷出來。 考慮明確指定類型參數。

類型參數候選'Response'不是有效的類型參數 ,因爲它不是候選'Response'的超類型。

屬性'類型'的類型不兼容。 類型'ResponseType'不可分配給'ResponseType'類型。這個名稱存在兩種不同的類型,但它們不相關。 類型''basic''不可分配給'ResponseType'類型。

錯誤在src/app/services/signup/signup.service.ts(34,17)中:屬性 '數據'在類型'Promise'上不存在。

我其實是一個初學者。我試圖把createUser(user: User): Observable<User>而不是createUser(user: User): Observable<any>,但我仍然得到相同的錯誤。 我的代碼中沒有任何「數據」或Promise類型,我不明白。 如果有人可以幫助我,我會非常感激。 在此先感謝。

回答

0

你的代碼看起來不錯。嘗試在您的服務中替換此代碼並檢查您是否得到回覆。

createUser(user: User){ 
let headers = new Headers({ 'Content-Type': 'application/json' }); 
let options = new RequestOptions({ headers: headers }); 
return this.http.post(this.url, user, options).map((response: Response) => 
response.json());} 
+0

感謝您的回答。它現在有效。 –