代码之家  ›  专栏  ›  技术社区  ›  GoGo

创建带有post参数的post服务

  •  0
  • GoGo  · 技术社区  · 6 年前

    我有一个API,如下所示:
    网址: http://test.com/api/

    此api具有以下post参数:
    token: mytoken
    content: project
    format: json
    returnFormat: json

    我正在尝试编写一个服务来检索数据。我写的服务是:

    import { Http } from '@angular/http';
    import { Injectable } from '@angular/core';
    import { Observable } from 'rxjs/Observable';
    
    @Injectable()
    export class RedCapTestService {
        parameters: Object = {
            'token': 'mytoken',
            'content': 'project',
            'format': 'json',
            'returnFormat': 'json'
        };
        baseUrl = 'https://test.com/api/';
    
       constructor(private http: Http) { }
    
    getProjectInfo() {
        return this.http.post(this.baseUrl, this.parameters).map(res => res.json()).catch(this.handleError);
    }
    
    }
    

    我有一个测试组件来测试服务。 在 test.component.ts

    export class RedcapTestProjectInfoComponent implements OnInit {
    project: any = {};
    
     constructor(private redcapService: RedCapTestService) { }
    
    ngOnInit() {
      this.getProjectInfo();
    }
    
    getProjectInfo() {
      this.redcapService.getProjectInfo().subscribe(project => {
        this.project = project;
      }, error => {
        console.log('error occured');
      });
    }
    
    }
    

    这是我的html团队模板:

    <h1>Project info</h1>
    
    <p>Project ID: {{ project.project_id }} </p>
    <p>Project Title: {{ project.project_title }} </p>
    

    这没有给我错误,但没有数据。 错误是: OPTIONS https://test.com/api/ 501 (Not Implemented) Failed to load https://test.com/api/: Response for preflight has invalid HTTP status code 501.

    我如何使用这个API和那些POST参数来获取数据。

    PS:我可以通过邮递员检索这些数据。

    1 回复  |  直到 6 年前
        1
  •  0
  •   GoGo    6 年前

    经过一些研究,我发现在我的情况下,我应该发送这些参数 FormData() 详情如下:

    getProjectInfo() {
        const formData = new FormData();
        formData.append('token', 'mytoken');
        formData.append('content', 'project');
        formData.append('format', 'json');
        formData.append('returnFormat', 'json');
    return this.http.post(this.baseUrl, formData).map(res => res.json()).catch(this.handleError);
    }
    

    如果你使用 HttpClient ,然后只需移除 map 操作人员