Node.js修改函数名后无法访问新函数名的问题求助
解决函数重命名后无法访问新名称的问题
看起来你遇到的问题核心是模块导出方式和导入调用不匹配,和node_modules完全没关系,所以重装依赖自然没用啦。咱们一步步理清楚:
问题根源
你在soapCall.js里的导出方式是直接把函数赋值给module.exports:
// 修改后 function checkUser(username, password){ ... } module.exports = checkUser
这种情况下,当你在app.js里require这个模块时,soap变量拿到的就是checkUser函数本身,而不是一个包含checkUser方法的对象。所以你用soap.checkUser(...)去调用,相当于在函数对象上找checkUser属性,自然找不到;而之前能用旧的call函数,其实是因为Node.js的模块缓存没更新,或者你之前的调用方式是直接soap(...)(也就是调用那个call函数)。
两种解决方案
方案1:保持单个函数导出,修改调用方式
既然导出的是函数本身,那直接调用这个变量就行,不用加方法名:
// app.js里改成这样 const checkUser = require('../../models/soapCall'); // 或者保留原来的变量名,直接调用 const soap = require('../../models/soapCall'); soap(username, password); // 这里的soap就是checkUser函数
方案2:改为导出对象,保留方法名调用
如果想继续用soap.checkUser(...)的方式,把soapCall.js的导出改成对象形式,这样后续还能添加更多导出函数:
// soapCall.js修改为 function checkUser(username, password){ ... } module.exports = { checkUser }; // 导出包含该函数的对象
这样app.js里的soap.checkUser(...)就能正常访问新函数名了。
额外提示:Node.js模块缓存
如果修改后还是没生效,记得重启你的Node.js服务——Node会缓存已加载的模块,不重启的话可能还是用旧的缓存内容。
内容的提问来源于stack exchange,提问作者MrSinaRJ
相关产品推荐
相关产品推荐

