Mongoose CastError:模型“Task”的路径“_listId”的值“:listId”转换为 ObjectId 失败
Posted
技术标签:
【中文标题】Mongoose CastError:模型“Task”的路径“_listId”的值“:listId”转换为 ObjectId 失败【英文标题】:Mongoose CastError: Cast to ObjectId failed for value ":listId" at path "_listId" for model "Task" 【发布时间】:2021-01-31 08:22:56 【问题描述】:我正面临着我的猫鼬中的施法错误。很抱歉再次问这个问题,但我无法弄清楚我的错误。我可以通过邮递员查看结果。但是,我无法在我的前端显示任务。当我尝试使用 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;
)
);
【问题讨论】:
【参考方案1】:在您的 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);
【讨论】:
感谢您的回复。我一直在热切地等待可以帮助我的人。我尝试使用上面的代码,但现在收到一条错误消息,提示“模型“Task”的路径“_listId”中的值“未定义”转换为 ObjectId 失败。 您是否将列表 id 传递给getTasks
函数?
params.lisId
是错字吗?
很抱歉,这是一个拼写错误。它现在正在工作。太感谢了。从两天开始,我一直在尝试解决此问题。非常感谢。以上是关于Mongoose CastError:模型“Task”的路径“_listId”的值“:listId”转换为 ObjectId 失败的主要内容,如果未能解决你的问题,请参考以下文章
Mongoose CastError:模型“Task”的路径“_listId”的值“:listId”转换为 ObjectId 失败
Mongoose CastError:模型“Post”的路径“_id”处的值“未定义”转换为 ObjectId 失败
CastError:模型的路径“_id”处的值“:id”转换为 ObjectId 失败
Mongoose:CastError:在路径“items”处为值“ value:'x'”转换为嵌入失败