我的 Mongoose 遇到了卡斯特劳。我很抱歉再次问这个问题,但是我无法找出我的错误。我可以通过 Postman 查看结果。但是,我不能在我的前端显示任务。当我试图用TaskService从api获取数据到前端时,我无法获取数据。
app.js
app.get('/lists/:listId/task',(req,res)=>{
Task.find({
_listId:req.params.listId
}).then((task)=>{
res.send(task);
})
})
app.post('/lists/:listId/task',(req,res)=>{
let newTask=new Task({
title:req.body.title,
_listId:req.params.listId
});
newTask.save().then((result)=>{
res.send(result);
})
})
app.patch('/lists/:listId/task/:taskId',(req,res)=>{
Task.findOneAndUpdate({
_listId:req.params.listId,
_id:req.params.taskId
},{$set:req.body})
.then(()=>{
res.sendStatus(200);
})
});
app.delete('/lists/:listId/task/:taskId',(req,res)=>{
Task.findOneAndRemove({
_id:req.params.taskId,
_listId:req.params.listId
}).then((result)=>{
res.send(result);
})
})
config.ts
export const baseURL=environment.production?'https://api.taskmanager.com':'http://localhost:3000';
export const listURL=baseURL+'/lists';
export const taskURL=baseURL+'/lists/:listId/task';
task.model.ts
const taskSchema=new mongoose.Schema({
title:{
type:String,
required:true
},
_listId:{
type:mongoose.Types.ObjectId,
required:true
},
});
const Task=mongoose.model('Task',taskSchema);
module.exports=Task;
task.model.ts(在前端)
export class Task{
title:String;
_listId:number;
constructor(title:String,Id:number){
this.title=title;
this._listId=Id;
}
}
task.service.ts
export class TaskServiceService {
constructor(private http:HttpClient) { }
getTasks(id:string):Observable<Task[]>{
let taskURL=`${baseURL}/lists/${id}/task`;
return this.http.get<Task[]>(taskURL);
}
}
task-view.component.ts
ngOnInit(){
this.getList();
this.route.params.subscribe((params:Params)=>{
console.log(params);
this.taskService.getTasks(params.lisId).subscribe((tasks)=>{
this.tasks=tasks;
})
});
}
2条答案
按热度按时间zsbz8rwp1#
在你的config.ts中,你设置了
taskURL=baseURL+'/lists/:listId/task'
,这样它总是将**:listId**作为参数listId
发送到你的服务器,这会导致转换错误。要解决这个问题,你可以将id传递给你的服务,然后从它创建url。类似于:kxe2p93d2#
这是因为激活的路由方法也在初始阶段被调用。但是_listId值将是未定义的,所以你必须处理这个问题