我有一條這樣的路徑api/courses/materials ,有一個問題表示將最后一個“材料”路線理解為引數,我收到一個錯誤:“CastError: Cast to ObjectId failed for value "materials" (type string) at path "_id" for模型“課程””,但如果我為我的最后一個“材料”添加額外的路線引數,api/course/materials/:id 它會很好地作業,我的模式是:
const courseSchema = new Schema<ICourse>({
title: { type: String, required: true, unique: true },
description: { type: String },
technology: [{ type: String, required: true }],
requiredSkills: [{ type: String }],
duration: { type: Number, required: true },
materials: [{ type: Schema.Types.ObjectId, ref: 'materials' }],
lessons: { type: Number },
testLink: { type: String },
});
const CourseModel = model<ICourse>('courses', courseSchema);
const materialSchema = new Schema<IMaterial>({
content: [
{
_id: { type: String },
stage: { type: Number },
content: [{ type: String }],
isCompleted: Boolean,
},
],
technology: [{ type: String }],
});
const MaterialModel = model<IMaterial>('materials', materialSchema);
和我收到錯誤的方法:
const getMaterialsProvider = async () => {
const materials = await MaterialModel.find();
if (!materials) {
throw new Error('materials not found');
}
return materials;
};
我如何結合路徑中的路徑,例如api/courses/materials “材料”未轉換為引數的位置
uj5u.com熱心網友回復:
您沒有為您的應用程式或路由器提供代碼,但是如果您在較短的路徑之前指定較長的路徑并且在具有固定段名稱的路徑(materials在下面的第 2段中)在具有引數的路徑之前指定相同的位置,它應該可以作業(以下第3個):
app.use("/api/courses/materials/:id", ...)
.use("/api/courses/materials", ...)
.use("/api/courses/:id", ...)
.use("/api/courses", ...);
路徑/api/courses/materials/3匹配所有四個,因此必須首先放置“最接近”的匹配。(如果您替換app.use為不同,則app.get其他段會阻止匹配:/api/courses/materials/3然后將僅匹配第一個。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/406234.html
標籤:
上一篇:當我運行此命令“firebaseemulators:start”時,它不會運行我的本地主機
下一篇:GET方法中沒有決議正文
