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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 13:25:50