Strapi用户图片上传关联字段触发TypeError报错求助
Strapi 4.6 上传用户头像关联字段时出现TypeError问题解决
运行环境
- 服务器:Digital Ocean Ubuntu 20.04 + Nginx
- Strapi版本:4.6
- 数据库:默认SQL数据库
- Node.js版本:18.13.0
- NPM版本:8.19.3
问题现象
调用Strapi上传接口 strapiback.com/api/upload 上传用户头像,携带以下FormData参数:
formdata.append("ref", "user"); formdata.append("refId", userId); formdata.append("field", "profpic"); formdata.append("source", "users-permissions");
- 包含
field字段时,上传直接失败,触发Cannot read properties of undefined (reading 'attributes')错误 - 移除
field字段后上传成功,但图片无法关联到用户的profpic字段
报错日志
error: Cannot read properties of undefined (reading 'attributes') 0|api | TypeError: Cannot read properties of undefined (reading 'attributes') 0|api | at /root/strapi/node_modules/@strapi/database/lib/entity-manager/morph-relations.js:11:57 0|api | at Array.filter (<anonymous>) 0|api | at getMorphToManyRowsLinkedToMorphOne (/root/strapi/node_modules/@strapi/database/lib/entity-manager/morph-relations.js:7:8) 0|api | at deleteRelatedMorphOneRelationsAfterMorphToManyUpdate (/root/strapi/node_modules/@strapi/database/lib/entity-manager/morph-relations.js:28:24) 0|api | at Object.attachRelations (/root/strapi/node_modules/@strapi/database/lib/entity-manager/index.js:500:17) 0|api | at Object.create (/root/strapi/node_modules/@strapi/database/lib/entity-manager/index.js:230:20) 0|api | at process.processTicksAndRejections (node:internal/process/task_queues:95:5) 0|api | at async Object.add (/root/strapi/node_modules/@strapi/plugin-upload/server/services/upload.js:363:17) 0|api | at async Promise.all (index 0) 0|api | at async Object.upload (/root/strapi/node_modules/@strapi/plugin-upload/server/services/upload.js:173:23)
问题原因
Strapi 4.6版本在处理users-permissions插件的用户模型关联字段时,存在形态关系(morph relations)处理的bug:当上传时指定field参数,系统无法正确识别用户模型的属性结构,导致读取attributes时触发未定义错误。
解决步骤
方法1:确认用户模型字段配置
- 找到项目中用户模型的配置文件,路径为
./src/extensions/users-permissions/models/User.js - 确保
profpic字段已正确配置为媒体关联类型,示例配置如下:
module.exports = { attributes: { profpic: { type: 'media', allowedTypes: ['images'], multiple: false, required: false }, // 保留原有其他属性配置 } };
- 保存文件后重启Strapi服务
方法2:分两步完成上传与关联
如果方法1无效,可拆分操作流程:
- 上传图片时移除
field字段,成功后获取返回的文件ID - 调用用户更新接口
PUT /api/users/:userId,请求体携带关联数据:
{ "data": { "profpic": [文件ID] } }
方法3:升级Strapi版本
该bug在Strapi 4.7及以上版本已修复,直接升级到最新稳定版即可解决:
npm install strapi@latest
升级后执行构建并重启服务:
npm run build npm run develop
内容的提问来源于stack exchange,提问作者FaysalB
相关产品推荐
相关产品推荐

