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
相关产品推荐
相关产品推荐

