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

React+MongoDB社交应用用户注册时POST请求出现500内部服务器错误

问题定位与解决方案

核心错误是服务器尝试访问的文件路径存在语法错误:public,assets应为public/assets,导致系统找不到目标目录,触发ENOENT错误。以下是具体修复步骤:

1. 修正Multer上传路径配置

检查服务器端Multer的存储配置,将错误的路径分隔符逗号改为斜杠,并确保目录自动创建:

const path = require('path');
const fs = require('fs');
const multer = require('multer');

const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    // 正确的存储路径,使用path.join避免跨平台路径问题
    const uploadDir = path.join(__dirname, 'public/assets');
    // 自动创建不存在的目录
    fs.mkdirSync(uploadDir, { recursive: true });
    cb(null, uploadDir);
  },
  filename: (req, file, cb) => {
    // 保留原文件名,或使用唯一文件名避免覆盖
    cb(null, file.originalname);
  }
});

const upload = multer({ storage });

2. 后端Register函数获取正确的图片路径

修改controllers/auth.js,从req.file中获取上传后的图片信息,而非从req.body读取手动传入的picturePath:

export const register = async (req, res) => {
  try {
    const { firstName, lastName, email, password, friends, location, occupation } = req.body;
    // 从Multer处理后的文件对象中获取文件名/路径
    const picturePath = req.file ? req.file.filename : '';

    const salt = await bcrypt.genSalt();
    const passwordHash = await bcrypt.hash(password, salt);

    const newUser = new User({
      firstName,
      lastName,
      email,
      password: passwordHash,
      picturePath,
      friends,
      location,
      occupation,
      viewedProfile: Math.floor(Math.random() * 10000),
      impressions: Math.floor(Math.random() * 10000),
    });
    const savedUser = await newUser.save();
    res.status(201).json(savedUser);
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
};

3. 前端移除冗余的picturePath手动传入

修改Form.jsx中的注册函数,删除手动添加picturePath的代码,让Multer自动处理文件上传:

const register = async (values, onSubmitProps) => {
    const formData = new FormData();
    for (let value in values) {
      formData.append(value, values[value]);
    }
    // 移除这行冗余代码
    // formData.append("picturePath", values.picture.name);

    const savedUserResponse = await fetch("http://localhost:3001/auth/register", {
      method: "POST",
      body: formData,
    });
    const savedUser = await savedUserResponse.json();
    onSubmitProps.resetForm();

    if (savedUser) {
      setPageType("login");
    }
  };

4. 验证修复效果

  1. 重启服务器
  2. 提交注册表单,检查服务器日志是否再出现路径错误
  3. 查看MongoDB数据库,确认用户信息(包括图片路径)是否正常存入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:46:07