Nest.js和Restful CRUD,为什么不发布这个帖子?

时间:2018-04-25 15:18:01

标签: nestjs

我有一个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 dev终端中工作:

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

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

出了什么问题?有效载荷不会到达控制器。我是服务器编码的新手。

Angular 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;
  }

1 个答案:

答案 0 :(得分: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。我删除它,它工作正常。