Angular 2 Http Post with Promise失败,不发送数据

时间:2017-04-27 16:55:38

标签: angular2-http

我正在尝试使用角度2进行http.post调用。我已经测试了postman中的调用,所以我知道api正在运行。我收到一个错误,输入为空,这意味着它没有获取数据。我已经阅读了一些答案和文章,但无法使用成功调用

有谁能让我对我失踪的东西有所了解?

public upload(name: string, data: any, result, contentType: string) : Promise<Response> {

        let headers = new Headers({ 'Content-Type': contentType });

        let options = new RequestOptions({ headers: headers });

        return this.http
            .post(this.urlAPI, data, options)
            .toPromise()
            .then(this.extractData)
            .catch(this.handleError);
    }

    extractData(res:Response) {
        console.log('res: ', res);
        let body = res.json();
        return Promise.resolve(res);
    }


    handleError(err: any): Promise<any> {
        console.error('An Error has occured: ', err);
        return Promise.reject(err);
    }

1 个答案:

答案 0 :(得分:1)

我不确定您的'数据'的类型是什么。数据必须在发送之前进行字符串化。以下是我的可行版本。

saveNote(note: ApprovalNoteModel): Observable<ApprovalNoteModel> {
    let body = JSON.stringify(note);
    let headers = this.utilsSvc.getAuthHeaders();
    headers.set('Content-Type', 'application/json');

    return this.http.post('cloud/api/approval/note', body,
        { headers: headers }
    ).map(response => response.json());
}

如果它是一个文件,那么你不能通过'http'做到这一点,我相信。这是我可行的版本。

addFileRequest(referenceId: number, licenseId: number, url: string, files: File[]): Observable<any> {
    return Observable.create(observer => {
        this.progressObserver = observer;
        let formData: FormData = new FormData(),
            xhr: XMLHttpRequest = new XMLHttpRequest();

        formData.append('referenceId', referenceId);
        formData.append('licenseId', licenseId);
        for (let i = 0; i < files.length; i++) {
            formData.append("uploads[]", files[i], files[i].name);
        }

        xhr.onreadystatechange = () => {
            if (xhr.readyState === 4) {
                if (xhr.status === 200) {
                    observer.next(xhr.response);
                    observer.complete();
                } else {
                    if (xhr.response.status)
                        observer.error(xhr.response);
                    else
                        observer.error({ 'status': xhr.status, '_body': xhr.response });
                }
            }
        };

        xhr.upload.onprogress = (event) => {
            this.progress = Math.round(event.loaded / event.total * 100);
            this.progressObserver.next(this.progress);
        };

        xhr.open('POST', url, true);
        xhr.setRequestHeader('Authorization', this.utilsSvc.getToken());
        xhr.send(formData);
    });
}