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

Mongoose提交字符串数组报Cast to string failed错误如何解决

错误原因

该类型转换错误是由前端代码错误 + 可选的传参格式问题共同导致的,对应修复步骤如下:


修复步骤

1. 修复Form.js逻辑错误

你现有代码存在3处明显语法/逻辑问题,直接替换onChange方法即可:

const onChange = async (event) => {
    dispatch({ type: START_LOADING });
    // 初始化为空数组而非空字符串,否则调用push方法会直接报错
    let imgArr = [];
    let obj = event.target.files;
    for (let i = 0; i < obj.length; i++) {
      try {
        // 取当前遍历的第i个文件,不要永远取第一个文件obj[0]
        const file = obj[i];
        const image = await resizeFile(file);
        imgArr.push(image);
      } catch (err) {
        console.log(err);
      }
    }
    // 直接用处理好的imgArr变量,不要加引号、不要额外套一层数组
    setPostData({ ...postData, selectedFile: imgArr });
    dispatch({ type: END_LOADING });
  };

2. 修复接口传参格式(仅使用FormData提交时需要)

如果你是用FormData对象封装请求参数,不能直接把数组塞进去,否则数组会被浏览器自动转成字符串传到后端,导致Mongoose识别错误,对应处理逻辑:

const formData = new FormData();
Object.keys(postData).forEach(key => {
  if (key === 'selectedFile' && Array.isArray(postData[key])) {
    // 数组类型逐个append,后端会自动解析为数组格式
    postData[key].forEach(item => formData.append(key, item));
  } else {
    formData.append(key, postData[key]);
  }
})
// 后续用formData作为请求体提交即可

3. Schema兜底配置(可选)

你的Schema里selectedFile: [String]写法本身是正确的,建议补全默认值避免空值报错:

selectedFile: {
  type: [String],
  default: []
}

4. 缓存清理(仍报错时执行)

如果修复后还是提示同样的类型转换错误,说明Mongoose加载的是旧版Schema缓存,删除node_modules/.cache文件夹后重启后端服务即可。


内容的提问来源于stack exchange,提问作者snir.hak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:36:02