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

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);

可选优化:改为对象参数避免顺序错位

如果不想记忆参数顺序,可以把函数定义改为接收单个对象参数,后续调用无需关心参数顺序:

  1. 修改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" });
    }
  });
};
  1. 调用时直接传对象即可:
accessFile.writeFileToFolderAccess({
  session: userSession,
  file: uploadFile,
  res: response,
  userId: loginUserId
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 19:51:03