0

我在处理 .post 有效负载时遇到了 400 错误,提示“请求不包含有效的记录集”。我想发布到 Postgres 数据库。这是我正在发送到服务器的有效负载。它是 JSON 格式的字符串。它正在被拒绝。我是 REST 和学习 JS、Angular 等的菜鸟。

{"resource":[{"first_name":"John","last_name":"Johnson","main_skill_title":"Application developer - frontend","main_skills":"Angular,JavaScript",,"country":"United States","email":"j@j.com"}]}

URL 是按照 DreamFactory 中间件在其 API Docs 中推荐的那样设置的,在这种情况下,控制台中会显示错误消息:

http://localhost:8080/api/v2/pfpsql/_table/members 400 (Bad Request)

DreamFactory 中间件为 Angular 2 提供了示例,但它们大多是在 Angular 开发的 RC 阶段编写的并且已经过时。此外,代码不遵循样式指南。

我已经成功使用.get。此代码工作正常,并使用我手动输入数据库的数据填充 Angular Material2 DataTable。

在组件中获取:

constructor(private http: HttpClient) {}

  ngAfterViewInit() {
    this.membersAdminService = new MembersAdminService(this.http);

    // This is for the Material2 DataTable.
    Observable.merge(this.paginator.page)
      .startWith(null)  // Delete this and no data is downloaded.
      .switchMap(() => {
        return this.membersAdminService.getMembers(
          this.paginator.pageIndex);
      })
      .map(data => {
        return data.resource;  // Change from json to array data.
      })
      .subscribe(data => {
        this.dataLength = data.length;
        this.dataSource.data = data;
      });
  }

在服务中获取:

 constructor(
    private http: HttpClient,
  ) { }


  public getMembers(page: number): Observable<DfApi> {
    return this.http.get<DfApi>(this.baseUrl, {headers: this.headers});
  }

问题是 .post 的有效负载。我已经使用此代码作为基础,并尝试了各种来自各种来源的 Observable 运算符和 HttpClient 建议,但没有任何东西向数据库添加成员。我显然走错了路,但在哪里?此代码的数据包在本文开头列出。

在服务中发布:

public addMember(memberData) {
    this.http.post(this.baseUrl, memberData, {headers: this.headers})

在组件中发布:

save(addMemberForm) {
    const enteredData = this.addMemberForm.addEditMemberForm.value;
    const memberData = JSON.stringify(enteredData);
    const jsonData = '{"resource": [' + memberData + ']}';
    this.membersAdminService.addMember(jsonData);  
  }
4

1 回答 1

0

我需要使用 JSON.parse 将数据放入数组格式。不接受 json 字符串。我还有其他几个数据库设置问题需要解决。我不能忘记 Postgres 喜欢蛇形的名字,而不是骆驼形的名字。但是,我认为这段代码并不像它应该的那样简洁。它看起来像一个黑客。我非常愿意接受其他建议!

save(addMemberForm) {
    const enteredData = this.addMemberForm.addEditMemberForm.value;
      // Result is JS object

    const memberData = JSON.stringify(enteredData);
      // Result is a string instead.

    const jsonData = '{"resource": [' + memberData + ']}';
      // Result is a string in JSON format in DreamFactory required format with {"resource": [

    const jsonArray = JSON.parse(jsonData);
      // Result is an array in JSON format.

    this.membersAdminService.addMember(jsonArray);  // I should be subscribing here, not in the service.
    addMemberForm.addEditMemberForm.reset();
    this.success();
  }
于 2017-11-15T20:16:24.930 回答