Угловой метод PATCH не допускается - http


1

Использование новейших угловых

Angular CLI: 6.0.0
Node: 8.11.1
OS: win32 x64
Angular: 6.0.0
... animations, cdk, cli, common, compiler, compiler-cli, core
... forms, http, language-service, material, platform-browser
... platform-browser-dynamic, router

Package                           Version
-----------------------------------------------------------
@angular-devkit/architect         0.6.0
@angular-devkit/build-angular     0.6.0
@angular-devkit/build-optimizer   0.6.0
@angular-devkit/core              0.6.0
@angular-devkit/schematics        0.6.0
@ngtools/webpack                  6.0.0
@schematics/angular               0.6.0
@schematics/update                0.6.0
rxjs                              6.1.0
typescript                        2.7.2
webpack                           4.6.0

Я изучаю углы и исследую различные http запросы, такие как GET, POST, PUT и теперь PATCH.

но у меня проблема, когда я использую метод PATCH, я просто PUT метод PUT и просто меняю PUT на PATCH, потому что я думал, что у них есть одни и те же параметры и функции. но я столкнулся с ошибкой:

enter image description here

service.ts

const heroesUrl = "api/heroes";
const httpOptions = {
  headers: new HttpHeaders({ Content-Type: application/json })
};

patchHero(hero: Hero): Observable<any> {
    return this.http.patch(heroesUrl, hero, httpOptions)
      .pipe(
        tap(_ => this.log(patched hero id=${hero.id})),
        catchError(this.handleError<any>(patchHero))
    );
}

component.ts

update(id: number, name: string): void {
    this.heroService.patchHero({id, name } as Hero)
        .subscribe(() => { 
        console.log("Success update") // This log is printing even if the Method not allow is appeared.
    });
}

Я просто работаю и практикую угловое задание данного учебника с этого сайта.

Источник
  •  49
  •  6
  • 4 мар 2020 2020-03-04 05:04:58

6 ответов

0

Даниэль Б понял это правильно. Ниже приведена информация о некоторых деталях.

Метод патча не планируется поддерживать с помощью angular-in-memory-web-api по этой проблеме GitHub здесь

Для справки я добавил метод patch в моем файле in-memory-data.service.ts с чем-то вроде этого.

export class InMemoryDataService implements InMemoryDbService {
    patch(requestInfo: RequestInfo): Observable<Response> {
        const body = createBody(requestInfo);
        const responseOptions: ResponseOptions = {
            headers: requestInfo.headers,
            url: requestInfo.url,
            body,
            status: STATUS.OK,
            statusText: getStatusText(STATUS.OK),
        }
        return requestInfo.utils.createResponse$(() => responseOptions);
    }
}
0

Даниэль Б понял это правильно. Ниже приведена информация о некоторых деталях.

Метод патча не планируется поддерживать с помощью angular-in-memory-web-api по этой проблеме GitHub здесь

Для справки я добавил метод patch в моем файле in-memory-data.service.ts с чем-то вроде этого.

export class InMemoryDataService implements InMemoryDbService {
    patch(requestInfo: RequestInfo): Observable<Response> {
        const body = createBody(requestInfo);
        const responseOptions: ResponseOptions = {
            headers: requestInfo.headers,
            url: requestInfo.url,
            body,
            status: STATUS.OK,
            statusText: getStatusText(STATUS.OK),
        }
        return requestInfo.utils.createResponse$(() => responseOptions);
    }
}
0

Это похоже на проблему отправки пустых заголовков.

Можете ли вы попробовать это, чтобы добавить заголовок к вашим параметрам:

let _headers = new HttpHeaders();
_headers = headers.append(Content-Type, application/json);
const httpOptions = {
    headers: _headers
};
  • 4 мар 2020 2020-03-04 05:04:59
0

Это похоже на проблему отправки пустых заголовков.

Можете ли вы попробовать это, чтобы добавить заголовок к вашим параметрам:

let _headers = new HttpHeaders();
_headers = headers.append(Content-Type, application/json);
const httpOptions = {
    headers: _headers
};
  • 4 мар 2020 2020-03-04 05:04:59
1

Ответ в этом случае не связан с самим угловым, а с использованием пакета angular-in-memory-web-api, который используется для подачи ложных данных в приложение. Он просто не имеет реализованного метода PATCH и, следовательно, ему не разрешено использовать.

Однако вы можете реализовать этот метод самостоятельно, как описано в документации пакета.

В классе InMemoryDataService в in-memory-data.service.ts вы можете определить метод patch(request: RequestInfo): Observable<Response> для обработки вашего запроса.

Простая проверка со следующим кодом должна распечатывать консольное сообщение!

patch(request: RequestInfo): Observable<Response> {
  console.log(This is inside your custom patch method!);
  return null;
}

Это, очевидно, не полная реализация метода PATCH, но поскольку вопрос не в том, что я предлагаю вам разобраться в различиях между PUT и PATCH и посмотреть, можете ли вы придумать это самостоятельно! (Подсказка, используйте PUT но не забудьте включить данные, которые вы также не исправляете!)

Вот пример с перехватчиком PATCH !

  • 4 мар 2020 2020-03-04 05:04:59
1

Ответ в этом случае не связан с самим угловым, а с использованием пакета angular-in-memory-web-api, который используется для подачи ложных данных в приложение. Он просто не имеет реализованного метода PATCH и, следовательно, ему не разрешено использовать.

Однако вы можете реализовать этот метод самостоятельно, как описано в документации пакета.

В классе InMemoryDataService в in-memory-data.service.ts вы можете определить метод patch(request: RequestInfo): Observable<Response> для обработки вашего запроса.

Простая проверка со следующим кодом должна распечатывать консольное сообщение!

patch(request: RequestInfo): Observable<Response> {
  console.log(This is inside your custom patch method!);
  return null;
}

Это, очевидно, не полная реализация метода PATCH, но поскольку вопрос не в том, что я предлагаю вам разобраться в различиях между PUT и PATCH и посмотреть, можете ли вы придумать это самостоятельно! (Подсказка, используйте PUT но не забудьте включить данные, которые вы также не исправляете!)

Вот пример с перехватчиком PATCH !

  • 4 мар 2020 2020-03-04 05:04:59