Angular 7 HttpClient post не может разобрать большое тело запроса? - PullRequest
0 голосов
/ 08 октября 2019

Есть ли у углового HttpClient ограничения по размеру тела запроса?

Я делал угловой проект, который использует API отдыха. API прост, он просто заменяет JSON-файл всякий раз, когда конечная точка API-файла попадает в файл, используя метод POST, с новым объектом JSON в качестве тела запроса.

Код работает хорошо, если новый объект JSON мал и имеет только несколько узлов. Однако код возвращает ошибку с кодом состояния 400 и сообщением об ошибке «Ошибка при разборе запроса», когда я пытаюсь отправить большойобъект. Ошибка, вызванная большим объектом, или я делаю это неправильно?

В последний раз, когда возвращается ошибка, когда я пытался отправить большой файл JSON размером ~ 1,5 МБ, объект JSON кажется действительным как несколькоон-лайн форматтеры json сообщают о нем как о допустимом объекте json.

Извините, если я не очень хорошо объяснил свою проблему, поскольку я не являюсь носителем английского языка, и я также совершенно новый в мире углов,Спасибо

import { HttpClient, HttpHeaders, HttpErrorResponse } from "@angular/common/http";
import { take, catchError } from "rxjs/operators";
import { throwError, Observable } from "rxjs";
import { Injectable } from "@angular/core";

const headers = new HttpHeaders({
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'Cache-Control': 'no-cache',
    'Access-Control-Allow-Origin': '*'
});

@Injectable()
export class configService {
    private _url = 'http://some-api-endpoint/';

    constructor(private http:HttpClient) { }

    private _save(data):Promise<any> {
        return this.http.post(this._url, data, { headers, responseType: 'text', observe:'response' })        
            .pipe(
                take(1),
                catchError(err => this._handleError(err))
            )
            .toPromise();
    }

    public async updateConfigFile(data): Promise<any> {

        try {
            const json = JSON.stringify(data, null, 2);
            const update = await this._save(json);
            if(update.status === 201) {
                return {
                    success: true,
                    data: update
                }
            } else {
                return {
                    success: false,
                    error: update
                }
            }
        } catch(err) {
            return {
                success: false,
                error: err.message
            }
        }        
    }

    private _handleError(error: HttpErrorResponse): Observable<never>{
        let errObj = {};
        if(error.error instanceof ErrorEvent) {
             const err = error.error
             console.warn('An client-side error occured:', {err});
             errObj = {
                 status: 'internal error',
                message: error.error.message
             }   
        } else {
             console.warn(`Backend returned code ${error.status} `, {error});
            errObj = {
                 status: error.status,
                 message: error.error
            }
        }

        return throwError(errObj);
    }
}
...