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

Node.js通过module.exports导入外部文件函数报TypeError怎么解决?

问题根因
  • 导出逻辑错误:utils/oauth2.js 中赋值给module.exports的立即执行函数没有返回值,默认返回undefined,因此main.js中导入的oauth2变量本身就是空值,访问oauth2.OAuth2自然抛出无法读取属性的错误。
  • 环境API误用:window和localStorage是浏览器专属API,Node.js环境不存在这两个对象,即使导出逻辑修复,纯Node.js场景下运行依然会抛出window is not defined错误。
修正方案

场景1:代码运行在纯Node.js环境

修改utils/oauth2.js代码如下,适配Node.js语法直接导出OAuth2对象,存储逻辑可根据实际需求调整(示例中用环境变量模拟):

// utils/oauth2.js
const OAuth2 = {
  _key: "token",
  /**
   * Get Token
   * 
   * @return OAuth2 access token if it exists, null if not.
   */
  getToken: function() {
    try {
      // 可替换为fs读本地文件、数据库查询等Node.js侧存储逻辑
      return process.env.OAUTH_TOKEN || null;
    } catch(error) {
      return null;
    }
  }
};

module.exports = OAuth2;

修改main.js调用逻辑,去掉多余的.OAuth2层级:

// main.js
const oauth2 = require('./utils/oauth2');
function startOAuth() {
  var token = oauth2.getToken();
  // 后续业务逻辑
}

场景2:代码为前端项目,仅用Node.js做打包/依赖管理

仅需调整utils/oauth2.js的导出逻辑,给立即执行函数加上return语句返回OAuth2对象即可:

// utils/oauth2.js
module.exports =  (function() {
    const OAuth2 = {
        init: function() {
            this._key = "token";
        },
        getToken: function() {
            try {
                return window.localStorage.getItem(this._key);
            }
            catch(error) {
                return null;
            }
         }
       };
    
    OAuth2.init();
    return OAuth2; // 新增return语句,将对象导出
})();

同步修改main.js调用逻辑:

// main.js
const oauth2 = require('./utils/oauth2');
function startOAuth() {
  var token = oauth2.getToken();
  // 后续业务逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:54:02