【问题标题】:How to use http delete () in Angular 6如何在 Angular 6 中使用 http delete()
【发布时间】:2019-05-19 20:57:34
【问题描述】:

myService.ts

  import { Injectable } from '@angular/core';
  import { Http, Response,Headers,RequestOptions } from '@angular/http';
  import { Observable } from 'rxjs';
  import 'rxjs/Rx';
  import{Router} from'@angular/router';
  import 'rxjs/add/operator/map';
  @Injectable()
  export class ManageJobDeleteService{
    constructor(private http: Http,private router:Router){};
    DeleteRequestToAPI(post_jobs_id:string){
       let body = JSON.stringify({post_jobs_id:post_jobs_id});
       let headers = new Headers({ 'Content-Type': 'application/json'});
       let options = new RequestOptions({ headers: headers });
        console.log(body);
        console.log(options);
      return this.http.delete('http://127.0.0.1:8000/api/employer/post_jobs/',body,options)//HERE I AM GETTING ERROR
      .map(this.extractData)
      .catch(this.handleError);
    }
   private extractData(res: Response){
      let body = res.json();
      console.log(body);
      return body || [];   
    }
    private handleError (error: any) {
      console.error(error);
      return Observable.throw(error.json().error || 'Server error');
    }
  }

错误:

预期 1-2 个参数,但得到 3.ts(2554)。

请告诉我如何在 Angular 6 中使用 http 删除请求来传递正文和选项。

【问题讨论】:

标签: angular typescript rest angular6


【解决方案1】:

我找到了使用 searchParams 的最佳方法。

    let url = new URL( this.baseUrl + '/*******');
        url.searchParams.append('llC', llC.toString());
        url.searchParams.append('ulC', ulC.toString());
return this.http.delete(url.toString());

在服务器端你可以得到

   let data = req.query;
   data['ulC'] ;
   data['llC'] ;

此方法适用于删除和获取选项!

【讨论】:

    【解决方案2】:

    如果你的后端是 Node 和 express

    router.delete('/post_jobs/:id',(req,res)=>{ let post_jobs_id = req.params.id })

    【讨论】:

      【解决方案3】:

      在您的网址中定义您的post_jobs_id 怎么样?然后在您的后端获取id

      例如,您可以定义:

      DeleteRequestToAPI(post_jobs_id:string) {
          const url = `http://127.0.0.1:8000/api/employer/post_jobs/${post_jobs_id}`;
          return this.http.delete(url, {
              headers: new HttpHeaders({ 'Content-Type': 'application/json' })
          })
          .map(this.extractData)
          .catch(this.handleError);
      }
      

      【讨论】:

        【解决方案4】:

        删除时没有正文参数。

        所以,你需要删除 body 参数。

        this.http.delete('http://127.0.0.1:8000/api/employer/post_jobs/',options)
        

        Reference

        class HttpClient {
             delete(url: string, 
               options: { headers?: HttpHeaders | { [header: string]: string | string[]; }; 
               observe?: HttpObserve; params... = {}): Observable<any>
        }
        

        编辑:如何传递 post_jobs_id?

        你可以使用 HttpParams:

        let httpParams = new HttpParams().set('aaa', '111');
        httpParams.set('bbb', '222');
        
        let options = { params: httpParams };
        
        this.http.delete('http://127.0.0.1:8000/api/employer/post_jobs/',options);
        

        【讨论】:

        • 那么我怎样才能通过 post_jobs_id 呢?
        • @lpd 在此之前,您需要注入 HttpClient 而不是 Http,因为它已在更高版本的 Angular 中被弃用。您还需要在 app.module 中导入 HttpClientModule
        • @KonradViltersten 这个评论是什么意思?我无法得到它
        • @DervişKayımbaşıoğlu 对不起。这是对星球大战中身材矮小、绿色的绝地武士尤达的参考。尤达的说话风格切换了通常的单词顺序。我的意思是表示 DELETE 没有 body 并将 nobody 放在一起以获得更好的效果。在那之后,我改变了顺序。 Yoda lingo.
        猜你喜欢
        • 1970-01-01
        • 2019-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-02
        • 1970-01-01
        相关资源
        最近更新 更多