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

Express+Node.js+Postgres+Multer多字段上传时Postman返回字段undefined问题排查

问题成因

  • Postman请求配置错误:使用Multer处理文件上传时,必须在Postman中选择form-data作为请求体格式,如果你选择了x-www-form-urlencoded、raw等其他格式,Multer无法识别文件,所有非文件字段也会返回undefined。同时form-data中填写的文件字段名必须和Multer配置的字段名完全一致:avatar、slide1、slide2、slide3,拼写错误也会导致文件识别失败。
  • 函数传参不匹配:updateChannel函数定义要求传入单个包含所有字段的对象参数,但你在路由中调用时传入了两个独立参数channelname和updateData,导致函数解构失败,所有字段都是undefined。
  • 文件路径读取错误:upload.fields返回的req.files中每个字段对应的值是文件数组,你直接将数组存入数据库不符合要求,需要取数组第一个元素的path属性拿到文件的存储路径。
  • 数据库逻辑错误:updateChannel中你返回的是更新前查询的旧数据,没有使用UPDATE语句RETURNING返回的最新更新结果。
  • 补充注意:如果需要支持用户仅上传部分图片、其余字段保留原值,需要编写动态拼接的UPDATE语句,避免未上传的字段被覆盖为NULL。

修复代码

1. 路由部分修改

usersRouter.put(
  "/myprofile/update/:channelname",
  upload.fields([
    { name: "avatar", maxCount: 1 },
    { name: "slide1", maxCount: 1 },
    { name: "slide2", maxCount: 1 },
    { name: "slide3", maxCount: 1 },
  ]),
  requireUser,
  async (req, res, next) => {
    const { channelname } = req.params;
    try {
      const updateData = {
        channelname,
        // 可选链取值避免未上传对应文件时报错
        profile_avatar: req.files?.avatar?.[0]?.path,
        slider_pic1: req.files?.slide1?.[0]?.path,
        slider_pic2: req.files?.slide2?.[0]?.path,
        slider_pic3: req.files?.slide3?.[0]?.path,
      };
      console.log(updateData);
      const channel = await getUserChannelByChannelName(channelname);
      // 按函数要求传入单个对象参数
      const updatedchannel = await updateChannel(updateData);
      res.send({channel, updatedchannel});
    } catch (error) {
      console.error("Could not update user profile", error);
      next(error);
    }
  }
);

2. updateChannel函数修改

async function updateChannel({channelname, profile_avatar, slider_pic1, slider_pic2, slider_pic3}) {
  try {
    // 接收UPDATE语句返回的更新后数据
    const result = await client.query(
      `
        UPDATE users_channel
        SET profile_avatar=$2, slider_pic1=$3, slider_pic2=$4, slider_pic3=$5
        WHERE channelname=$1
        RETURNING *;
      `,
      [channelname, profile_avatar, slider_pic1, slider_pic2, slider_pic3]
    );
    // 返回最新的更新结果
    return result.rows[0];
  } catch (error) {
    throw error;
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 22:12:03