如何为来自表单输入的 JSON 对象设置 Angular REST api 和 ClientHttp?
How to setup Angular REST api with ClientHttp for JSON object from form inputs?
我正在努力处理 .post 负载并收到 400 错误,"The request contains no valid record sets." 我想 post 到 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 文档中的建议进行设置,在本例中,控制台中显示错误消息:
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 建议,但没有向数据库添加成员。我显然在错误的轨道上,但在哪里?此代码的数据包列在post.
的开头
POST 在服务中:
public addMember(memberData) {
this.http.post(this.baseUrl, memberData, {headers: this.headers})
POST 在组件中:
save(addMemberForm) {
const enteredData = this.addMemberForm.addEditMemberForm.value;
const memberData = JSON.stringify(enteredData);
const jsonData = '{"resource": [' + memberData + ']}';
this.membersAdminService.addMember(jsonData);
}
我需要使用 JSON.parse 将数据放入数组格式。 json 字符串未被接受。我还有其他几个数据库设置问题需要修复。我不能忘记 Postgres 喜欢蛇形大小写 first_name,而不是驼峰大小写 firstName。但是,我认为这段代码并没有达到应有的简洁程度。它看起来像一个黑客。我非常愿意接受其他建议!
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();
}
我正在努力处理 .post 负载并收到 400 错误,"The request contains no valid record sets." 我想 post 到 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 文档中的建议进行设置,在本例中,控制台中显示错误消息:
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 建议,但没有向数据库添加成员。我显然在错误的轨道上,但在哪里?此代码的数据包列在post.
的开头POST 在服务中:
public addMember(memberData) {
this.http.post(this.baseUrl, memberData, {headers: this.headers})
POST 在组件中:
save(addMemberForm) {
const enteredData = this.addMemberForm.addEditMemberForm.value;
const memberData = JSON.stringify(enteredData);
const jsonData = '{"resource": [' + memberData + ']}';
this.membersAdminService.addMember(jsonData);
}
我需要使用 JSON.parse 将数据放入数组格式。 json 字符串未被接受。我还有其他几个数据库设置问题需要修复。我不能忘记 Postgres 喜欢蛇形大小写 first_name,而不是驼峰大小写 firstName。但是,我认为这段代码并没有达到应有的简洁程度。它看起来像一个黑客。我非常愿意接受其他建议!
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();
}