问题描述
我正在开发我的项目,在测试阶段我使用了 angular npm 包的 in-memory-web-api。
import { InMemoryDbService } from "angular-in-memory-web-api";
export class FakeBackendService implements InMemoryDbService{
createDb(){
let users = [
{
id: 1,username: 'maulik',city: 'ABC',state: 'xyz',role: 'admin',courses: []
},{
id: 2,username: 'donald',city: 'poi',state: 'bnv',role: 'Student',courses: [
{
courseId: 23,course_name: 'Data visualisation',preRequistics: 'NA',instructor_name: 'maulik',duration: 23,status: 'In-progress',}
]
}
];
}
现在,我想在 id:2 的课程数组中添加一个对象,如下所示:
courses: [
{
courseId: 23,},{
courseId: 28,course_name: 'Django',preRequistics: '',duration: 80,}
]
所以,我想在课程数组中添加新对象(更新)。那么使用 PUT 或 POST 方法如何为此编写 API?我使用 PUT 尝试了以下代码,但没有成功。有人可以帮我吗?
const url = '${this.url}/?courses=${data.object}'
解决方法
要在数据集中添加/插入新记录,请使用 HTTP POST。
Angular 内存中提供程序将拦截对内存中数据服务的任何 HTTP 请求。你可以试试这样的:
addCourse(course: Course): Observable<Course> {
return this.http.post<Course>(this.Url,course,this.httpOptions)
.pipe(
tap((newCourse: Course) =>
this.log(`added course with id=${newCourse.id}`)),catchError(this.handleError<Course>('addCourse'))
);
}
使用 HTTP PUT 要求您使用现有记录 ID,这仅对更新现有记录有用。所以在这种情况下使用 HTTP POST。
,我刚刚进行了几次尝试和错误,并使用 PUT 方法找到了解决方案。
updateCourse(courseObj){
return this.http.put(this.base_url,courseObj)
.pipe(map(res => res));
}
它更新现有记录如下:
courses: [
{
courseId: 3,course_name: 'Angular',preRequistics: 'typescript',instructor_name: 'donald',duration: 5,status: 'In-progress',noOfEnrolledStudents: 18
},{
courseId: 4,course_name: 'new course added',preRequistics: 'NA',instructor_name: 'George',duration: 8,noOfEnrolledStudents: 0
}
]