Я создаю приложение со списком дел, используя node js, express и mongoose.
теперь я пробую функцию удаления элемента, используя флажок из формы, чтобы передать item._id в экспресс,
Мой тип данных для элементов списка дел такой:
const todoSchema = новый mongoose.Schema({ контекст: строка }); todoList> db.todolists.find() [ { _id: ObjectId("65085d9277578bec0a1b9415"), контекст: «злой», __в: 0 }, { _id: ObjectId("65085db177578bec0a1b9421"), контекст: 'чрезвычайно зол', __в: 0 }, вот мой код EJS:
а вот мой JS-код:
app.post("/delete", async(req, res) => { constcheckItem = req.body.checkbox; console.log(checkedItem); todolist.deleteOne({_id:checkItem}) .then(console.log(`Элемент (${checkedItem}) был удален.`)).catch((err) => { console.log(ошибка); }); items = await todolist.find({}, { _id: 0, context: 1 }); console.log(`теперь список дел содержит ${items.length} элементов.`) res.redirect("/"); }); Я распечатываю item._id (req.body.checkbox). и получил только пустую строку "".
поймать ошибку:
CastError: не удалось выполнить приведение к ObjectId для значения "" (строка типа) по пути "_id" для модели "todolist" в ObjectId.cast (/Users/xuxiang/Documents/BACKEND/todoList-one/node_modules/mongoose/lib/schema/objectid.js:250:11) в SchemaType.applySetters (/Users/xuxiang/Documents/BACKEND/todoList-one/node_modules/mongoose/lib/schematype.js

12) в SchemaType.castForQuery (/Users/xuxiang/Documents/BACKEND/todoList-one/node_modules/mongoose/lib/schematype.js

15) при приведении (/Users/xuxiang/Documents/BACKEND/todoList-one/node_modules/mongoose/lib/cast.js:356:32) в Query.cast (/Users/xuxiang/Documents/BACKEND/todoList-one/node_modules/mongoose/lib/query.js:4911:12) в Query._castConditions (/Users/xuxiang/Documents/BACKEND/todoList-one/node_modules/mongoose/lib/query.js

10) в model.Query._deleteOne (/Users/xuxiang/Documents/BACKEND/todoList-one/node_modules/mongoose/lib/query.js

8) в model.Query.exec (/Users/xuxiang/Documents/BACKEND/todoList-one/node_modules/mongoose/lib/query.js:4430:28) atprocess.processTicksAndRejections(node:internal/process/task_queues:95:5) { строковое значение: '""', Формат сообщения: неопределенный, вид: 'ObjectId', ценить: '', путь: '_id', причина: BSONError: переданный аргумент должен быть строкой из 12 байтов, строкой из 24 шестнадцатеричных символов или целым числом. по новому ObjectId (/Users/xuxiang/Documents/BACKEND/todoList-one/node_modules/bson/lib/bson.cjs

23) в castObjectId (/Users/xuxiang/Documents/BACKEND/todoList-one/node_modules/mongoose/lib/cast/objectid.js:25:12) в ObjectId.cast (/Users/xuxiang/Documents/BACKEND/todoList-one/node_modules/mongoose/lib/schema/objectid.js:248:12) в SchemaType.applySetters (/Users/xuxiang/Documents/BACKEND/todoList-one/node_modules/mongoose/lib/schematype.js

12) в SchemaType.castForQuery (/Users/xuxiang/Documents/BACKEND/todoList-one/node_modules/mongoose/lib/schematype.js

15) при приведении (/Users/xuxiang/Documents/BACKEND/todoList-one/node_modules/mongoose/lib/cast.js:356:32) в Query.cast (/Users/xuxiang/Documents/BACKEND/todoList-one/node_modules/mongoose/lib/query.js:4911:12) в Query._castConditions (/Users/xuxiang/Documents/BACKEND/todoList-one/node_modules/mongoose/lib/query.js

10) в model.Query._deleteOne (/Users/xuxiang/Documents/BACKEND/todoList-one/node_modules/mongoose/lib/query.js

8) в model.Query.exec (/Users/xuxiang/Documents/BACKEND/todoList-one/node_modules/mongoose/lib/query.js:4430:28), Тип значения: 'строка', модель: Модель { todolist } } Но когда я передаю item.context в выражение, он может успешно получить правильный результат. для _id и __v я могу получить только пустую строку "".
Я тоже искал обсуждение курса, спрашивал в ChatGPT, решения не получил.
Спасибо за ваше время и помощь.