Node.js跨文件调用函数报Cannot read property 'name'错如何解决
初始导入undefined问题原因
你首次尝试导入时,目标函数定义在users.js中,但你引用的是./Upload模块,路径和文件名不匹配,自然找不到对应导出项,拿到的结果为undefined。
拆分后报错的根因
writeFileToFolderAccess函数定义时要求按顺序传入4个参数:file、userId、res、session,你调用时只传入了1个session参数,导致参数接收顺序完全错位,形参file实际拿到的是你传入的session对象(或对应位置空值),自然找不到file.name属性。
修复步骤
1. 修正导入写法
你当前的导入写法冗余且不规范,二选一即可:
- 写法一:引入整个模块对象
const accessFile = require("../fileStructure/AccessFile");
- 写法二:直接解构引入需要的函数
const { writeFileToFolderAccess } = require("../fileStructure/AccessFile");
2. 调用时补全所有必填参数
调用时必须按参数顺序传入所有4个必填参数,示例如下(替换为你业务中实际的对应变量即可):
// 示例变量,替换为你实际代码里的对应值 const uploadFile = req.files.targetFile; // 要上传的文件对象 const loginUserId = req.user.id; // 登录用户ID const response = res; // 接口响应对象 const userSession = req.session; // 用户session对象 // 按顺序传参调用 accessFile.writeFileToFolderAccess(uploadFile, loginUserId, response, userSession);
可选优化:改为对象参数避免顺序错位
如果不想记忆参数顺序,可以把函数定义改为接收单个对象参数,后续调用无需关心参数顺序:
- 修改
AccessFile.js函数定义:
exports.writeFileToFolderAccess = ({ file, userId, res, session }) => { // 内部逻辑完全不用修改 const filePath = `/imageUpload/${userId}/${file.name}`; console.log("the session", filePath); console.log("My session and path", userId, session); file.mv(filePath, function (err) { if (err) { return res.status(500).send(err); } else { session.uploadedFilePath = filePath; res.json({ status: "ok", message: "File uploaded" }); } }); };
- 调用时直接传对象即可:
accessFile.writeFileToFolderAccess({ session: userSession, file: uploadFile, res: response, userId: loginUserId });
内容的提问来源于stack exchange,提问作者user16364975
相关产品推荐
相关产品推荐

