Postman POST请求无法更新MongoDB集合的问题排查
问题:POST请求添加产品返回404错误
我正在使用Postman练习更新MongoDB数据库及集合,现有users和products两个集合。GET请求能正常获取产品和用户集合信息,但发送POST请求添加产品并更新用户的products数组时返回404错误,相关代码及请求信息如下:
1. 数据模型Schema
Product Schema
import mongoose from "mongoose"; const Schema = mongoose.Schema; const ProductSchema = new Schema({ title: { type: String, required: true, }, description: { type: String, required: true, }, price: { type: Number, required: true, }, image: { type: String, }, location: { type: String, required: true, }, condition: { type: String, required: true, }, category: { type: String, required: true, enum: ["Cars", "Electronics", "Clothing", "Furniture", "Other"], }, seller: { type: Schema.Types.ObjectId, ref: "User", }, createdAt: { type: Date, default: Date.now, }, }); const Product = mongoose.model("Product", ProductSchema); export default Product;
User Schema
import mongoose from "mongoose"; const Schema = mongoose.Schema; const UserSchema = new Schema({ firstName: { type: String, required: true, min: 2, max: 50, }, lastName: { type: String, required: true, min: 2, max: 50, }, email: { type: String, required: true, unique: true, }, password: { type: String, required: true, }, location: { type: String, required: true, }, products: [ { type: Schema.Types.ObjectId, ref: "Product", }, ], createdAt: { type: Date, default: Date.now, }, }); const User = mongoose.model("User", UserSchema); export default User
2. 路由配置
index.js中:
app.use("/product",productRoutes); app.use("/user", userRoutes);
userRoutes中的POST路由:
router.post(":uid/add-product", addProduct);
3. 控制器函数addProduct
export const addProduct = async (req, res, next) => { try { const id = req.params.uid; const user = await User.findById(id); if (!user) { return res.status(404).json({ message: "User not found" }); } const product = new Product({ title: req.body.title, description: req.body.description, price: req.body.price, image: req.body.image, location: req.body.location, condition: req.body.condition, category: req.body.category, seller: user._id, }); await product.save(); user.products.push(product._id); await user.save(); res.status(200).json(user.products); } catch (err) { res.status(404).json({ message: err.message }); } };
4. Postman请求信息
请求URL:
http://localhost:3005/user/63e93470d58236724ef10162/add-product
请求体(原始JSON):
{ "title": "New Product", "description": "great for anything", "price": 2000, "image": "pexels.com", "location": "Dubai", "condition": "new", "category": "Clothing" }
问题原因及解决方案
核心问题:路由定义缺少斜杠
你的POST路由定义有误:
router.post(":uid/add-product", addProduct);
这里的路由参数:uid前面缺少斜杠,导致Express无法正确匹配请求路径。正确的路由应该是:
router.post("/:uid/add-product", addProduct);
没有斜杠的情况下,Express会把路由解析为user:uid/add-product,而你的请求路径是user/[用户ID]/add-product,两者不匹配,因此返回404。
次要优化:请求体JSON的多余逗号
请求体中最后一个字段category后面的逗号已移除,严格来说带逗号的JSON属于格式错误,虽然部分解析器能兼容,但修正后可避免潜在的解析问题。
修改后重新发送POST请求即可正常执行。
内容的提问来源于stack exchange,提问作者novicecoder
相关产品推荐
相关产品推荐

