数据库已连接但无法新增Todo数据,Postman报Cannot GET /api/v1/createTodo错误
问题分析与解决
核心问题
错误Cannot GET /api/v1/createTodo的直接原因是:你在Postman中使用了GET请求方法,但代码里/api/v1/createTodo路由仅支持POST请求。
具体修正步骤
1. 调整Postman请求方式
在Postman中:
- 将请求方法从
GET切换为POST - 在
Body选项卡选择raw,格式设为JSON,传入示例请求体:
{ "title": "待办标题", "description": "待办描述" }
2. 修正文件路径与注释混淆问题
你的代码注释存在路径错误:
todos.js实际应放在routes文件夹(而非标注的models folder)- Todo模型文件应放在
models文件夹(而非标注的routes folder)
确保项目文件结构如下:
项目根目录/ ├── config/ │ └── database.js ├── controllers/ │ └── createTodo.js ├── models/ │ └── Todo.js ├── routes/ │ └── todos.js ├── app.js └── .env
3. 修复模型时间字段的默认值问题
模型中createdAt和updatedAt的default:Date.now()会导致所有文档的时间固定为服务器启动时间,需改为不带括号的Date.now,让Mongoose在创建文档时自动生成当前时间:
// models/Todo.js const mongoose = require("mongoose"); const todoSchema = new mongoose.Schema( { title:{ type:String, required:true, maxLength:50, }, description: { type:String, required:true, maxLength:50, }, createdAt:{ type:Date, required:true, default:Date.now, // 去掉括号 }, updatedAt:{ type:Date, required:true, default:Date.now, // 去掉括号 } } ); module.exports = mongoose.model("Todo", todoSchema);
4. 可选:自动维护更新时间
如果希望文档修改时自动更新updatedAt,可以用Mongoose的timestamps选项替代手动定义的时间字段,简化代码:
// models/Todo.js const mongoose = require("mongoose"); const todoSchema = new mongoose.Schema( { title:{ type:String, required:true, maxLength:50, }, description: { type:String, required:true, maxLength:50, } }, { timestamps: true } // 自动生成createdAt和updatedAt,更新时自动修改updatedAt ); module.exports = mongoose.model("Todo", todoSchema);
验证流程
- 重启Express服务器
- 在Postman中发送POST请求到
http://localhost:4000/api/v1/createTodo,携带正确的JSON请求体 - 查看MongoDB数据库,确认新的Todo文档已成功创建
内容的提问来源于stack exchange,提问作者Harshada patil
相关产品推荐
相关产品推荐

