Mongoose 投掷错误:在模型“Task”的路径“_listId”中,值“:listId”转换为ObjectId失败

kq4fsx7k  于 2022-11-13  发布在  Go
关注(0)|答案(2)|浏览(134)

我的 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;
      })
    });
  }
zsbz8rwp

zsbz8rwp1#

在你的config.ts中,你设置了taskURL=baseURL+'/lists/:listId/task',这样它总是将**:listId**作为参数listId发送到你的服务器,这会导致转换错误。要解决这个问题,你可以将id传递给你的服务,然后从它创建url。类似于:

getTasks(id: string):Observable<Task[]>{
  let taskURL = `${baseURL}/lists/${id}/task`;
  return this.http.get<Task[]>(taskURL);
}
kxe2p93d

kxe2p93d2#

这是因为激活的路由方法也在初始阶段被调用。但是_listId值将是未定义的,所以你必须处理这个问题

相关问题