You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开发Express待办清单时update/delete路由无报错却不生效

问题根源

你没有引入mongoose不会导致操作失效,原生MongoDB Node驱动本身就支持findOneAndUpdate、findOneAndDelete方法,当前操作不生效的核心原因是类型不匹配:

  • 前端传到后端的todoId是字符串格式
  • MongoDB中存储的_id是ObjectId类型,直接用字符串匹配无法命中对应文档,所以操作不会生效,也不会抛出错误

修复步骤

第一步:引入ObjectId工具

修改server.js头部的mongodb导入语句,引入ObjectId:

// 把原来的这行
const { request } = require("mongodb");
// 替换为
const { request, ObjectId } = require("mongodb");

第二步:修改所有_id查询的逻辑

把server.js中三个操作接口里的_id查询条件,都改成转换为ObjectId的格式:

  1. 标记完成接口/markComplete的查询条件:
{
  _id: ObjectId(req.body.todoId),
}
  1. 标记未完成接口/markIncomplete的查询条件和上面一致
  2. 删除接口/deleteToDo的查询条件也改为_id: ObjectId(req.body.todoId)

第三步:放开标记完成后的页面刷新逻辑

main.js里的completeToDoFunc方法中,你注释了location.reload(),放开这行注释,否则标记完成后页面不会刷新,看不到状态变更。

可选排查技巧

你可以在接口操作后打印下方法返回的结果,确认是否匹配到了文档:比如findOneAndUpdate返回的结果里有lastErrorObject.n字段,如果值为1说明匹配到了文档,为0说明没匹配到,方便后续排查。

内容的提问来源于stack exchange,提问作者Julian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:24:00