Отправлять заголовки через универсальный метод в рабочем процессе HTTP CRUD - PullRequest
0 голосов
/ 03 марта 2019

У меня есть такая услуга:

Примечание: Здесь мне нужно работать с cookies

  book(data: Spa): Observable<any> {
    return this.http.post(`${environment.apiURL}:${environment.port}/${environment.domain}/abc/my.json`, data,
      {
        headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
      });
  }

Вы можете видеть, что каждыйметод, где я должен отправить headers.Что очень некрасиво и не DRY.Поэтому я хотел бы написать общий CRUD, чтобы добавить его автоматически.Как я могу это сделать?

Я пробовал это:

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { HttpClient } from '@angular/common/http';
import { RequestOptions } from '@angular/http';

@Injectable({
  providedIn: 'root'
})
export class CommonService {

  constructor(private http: HttpClient) { }

  post(url, params): Observable<any> {
    return new Observable(observer => {
      const headers = new Headers();
      let options = new RequestOptions({ headers: this.createHeader(headers) });
      this.http.post(url, params, options)
        .subscribe(response => {
          observer.next(response);
          observer.complete();
        }, (e) => {
          observer.error(e);
        });

    })
  }

  createHeader(headers: Headers): Headers {
    headers.append('Content-Type', 'application/x-www-form-urlencoded');
    return headers;
  }
}

Но это выдает эту compile time ошибку в этой строке let options = new RequestOptions({ headers: this.createHeader(headers) });

ТипВ «Заголовках» отсутствуют следующие свойства типа «Заголовки»: ключи, значения, toJSON, getAll и еще 2.ts (2740) interfaces.d.ts (61, 5): ожидаемый тип происходит из свойства «заголовки»который объявлен здесь для типа 'RequestOptionsArgs' (свойство) RequestOptionsArgs.headers ?: Заголовки

И он также говорит, что warning тоже:

RequestOptions устарел: см.https://angular.io/guide/http (амортизация)

1 Ответ

0 голосов
/ 03 марта 2019

попробуй

this.http.post(url, params, {headers: this.createHeader(headers)})

или даже лучше, взгляни на HttpInterceptors для общих заголовков

и вот хороший маленький учебник

...