1

我有一个 Angular 服务,它已通过名为 DreamFactory 的 PHP 中间件成功发布到 Firebase 和 Postgres。Angular 应用程序有效。问题出在下面的 Nestjs 控制器 @Post() 或服务 add() 中。我想发布一个名为 recordData 的 json 对象。我得到一个空对象而不是我的 json 数据,这在 Angular 服务中是正确的。服务器 console.log 结果:

recordData in controller:  {}
req:  {}
recordData in service:  {}

Angular CORS 代理服务器在 Angular 开发终端中工作:

[HPM] POST /api/members -> http://localhost:3000

Angular 使用开发服务器端口 4200,Nestjs 使用 3000。典型的开发设置。

怎么了?有效载荷没有到达控制器。我是服务器编码的新手。

角http.service.ts:

  private api = '/api/';
  ...
  public addRecord(dbTable: string, recordData):  Observable<any> {
    return this.http
      .post(`${this.api}${dbTable}`, recordData);  
  // For this example I'm posting to localhost:3000/api/members db table.
  }

我的成员 Nest 控制器。@Get 有效,@Post 无效。

@Controller('api/members')  // /members route
export class MembersController {
  constructor(private readonly membersService: MembersService) {}

  @Get()
  async findAll(): Promise<Members[]> {
    return await this.membersService.findAll();
  }


  @Post()
  async addItem(@Req() req, @Body() recordData: AddMemberDto) {
    console.log('recordData in controller: ', recordData);
    console.log('req: ', req.body);
    const result: Members = await this.membersService.addItem(recordData);
    if (!result)
      throw new HttpException('Error adding new Member', HttpStatus.BAD_REQUEST);

    return result;
  }
4

1 回答 1

0

有几个问题,其中一些我最终在上面的编辑中修复。但是,主要问题是我需要这样的标题信息。虽然我将这些用于其他后端,但 Nestjs 似乎不需要它们。错误观念。这是我的 Angular http.service 设置。

  private headers = new HttpHeaders()
    .set('content-type', 'application/json')
    .set('observe', 'response');

  public addRecord(dbTable: string, recordData):  Observable<any> {
    return this.http
      .post(`${this.api}${dbTable}`, recordData, {headers: this.headers});
  }

我还想指出,Nestjs 的许多实现都使用 dto 类型作为数据参数,因此在 Nestjs 控制器中使用 recordData: AddMemberDto。我删除了它,它工作正常。

于 2018-04-26T18:56:37.470 回答