【问题标题】:Can't access function after name changed in node.js在 node.js 中更改名称后无法访问功能
【发布时间】:2020-01-03 11:32:17
【问题描述】:

我在项目中的一个文件中有一个函数,我更改了它的名称并且无法使用新名称访问它!仍然可以调用旧名称

我尝试删除 node_modules 并使用 npm i 重新安装它

我正在使用的两个文件都有代码:

soapCall.js

之前:

function call(username, password){
    ...
}

module.exports = call

之后:

function checkUser(username, password){
    ...
}

module.exports = checkUser

我是如何导入和使用的:

app.js

const soap = require('../../models/soapCall');
...
soap.checkUser(username, password);

奇怪的是我仍然无法访问新的函数名称

在此之前我使用名称 call 并且仍然可以在我的 app.js 文件中使用 call 函数

【问题讨论】:

  • 可以分享之前改名的代码吗?
  • @JothiBasu 更新了之前和之后的代码,当然在 app.js 文件中我使用了soap.call
  • 你重启服务器了吗?
  • 根据您的示例,我看不出您是如何调用 soap.call 的,您导出的是函数,而不是对象
  • 既然你已经导出了一个函数,用soap.checkUser调用它显然是错误的,你只能用soap(..., ...)调用它。问题可能来自一个事实,即.call 可以在任何函数上调用(就像apply),因此您可能错误地使用.call 间接调用该函数。

标签: javascript node.js function object ecmascript-6


【解决方案1】:

call 已经可以作为函数原型上的方法使用 - Function.prototype.call。这意味着soap 是一个函数,这就是为什么call 有效,而checkUser 无效。

soap 是一个函数,因为您要从文件中导出一个函数,然后在主文件中简单地重命名它。如果要更改名称,请更改导入名称:

const checkUser = require("../../models/soapCall");

或者导出一个对象并像这样使用它:

module.exports = { checkUser };
// Main file
const soap = require("../../models/soapCall");
soap.checkUser(...);

对象方法还允许您从一个文件中导出多个函数 - 您可以通过解构将这些函数放入它们自己的变量中:

module.exports = { checkUser, otherFunc };
// Main file
const { checkUser, otherFunc } = require("../../models/soapCall");
checkUser(...); // Calls checkUser function
otherFunc(...); // Calls otherFunc function

【讨论】:

    【解决方案2】:

    你导出的是一个函数而不是一个Object,所以你需要直接调用soap()

    关于能够运行call,它是函数原型的一部分。所以你对Function.prototype.call() 感到困惑

    【讨论】:

      【解决方案3】:

      根据@Wiktor Zychla 的评论,像这样使用它

      soapCall.js

      exports.checkUser(username, password){
      
      }
      

      app.js

      const soap = require('../../models/soapCall');
      soap.checkUser(username, password);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-05
        • 1970-01-01
        • 2019-09-12
        • 2012-09-05
        • 2018-05-08
        • 2018-02-01
        • 1970-01-01
        相关资源
        最近更新 更多