我有一个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;
}
答案 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。我删除它,它工作正常。