在自定义节点 - NodeRED中调用另一个函数

时间:2018-06-19 10:02:54

标签: javascript node.js

我正在尝试从另一个文件访问该函数,如下所示:

exp1.js

Glide.with()
            .load()
            .into();

我想在另一个名为 exp2.js 的文件中访问“expIn()”我该如何实现? 请帮我。

2 个答案:

答案 0 :(得分:0)

按原样,您不会导出expIn()。您正在导出声明和定义expIn()的外部函数。 expIn()只是一个局部变量,无法在实际导出的匿名外部函数之外访问。要使其对其他文件可见,您必须直接导出它或在导出的函数 上定义它。

您错过了一些代码,但在expIn()之外您有3个选项可以访问exp1.js。首先是直接导出

<强> exp1.js

module.exports = function expIn(config) {
  // Code...
};

<强> exp2.js

const { expIn } = require('exp1.js');

expIn({/*config*/});

或者,您可以将expIn()添加到外部函数的原型中。当您想要导出一个附加了多个方法的类时,通常会执行此操作。您可以使用以下两种方法之一。首先,与你已经做的最相似的方法是

<强> exp1.js

module.exports = function ClassName(/*constructor args*/) {
  this.expIn = function expIn(config) {
    // Code...
  };

  // Other initialization...
};

或者,您可以使用此方法在原型上更明确地定义expIn()

<强> exp1.js

function ClassName(/*constructor args*/) {
  // Initialize class.
}

ClassName.prototype.expIn = function expIn(config) {
  // Code...
};

module.exports = ClassName;

无论您在上面选择哪两种方法,都可以将其作为

进行访问
const ClassName = require('exp1.js');

let classInstance = new ClassName();
classInstance.expIn({/*config options/*});

您可以使用的最后一种方法是将expIn()定义为函数类的静态方法。这看起来像是:

<强> exp1.js

function ClassName(/*constructor args*/) {
  // Initialization code...
}

ClassName.expIn = function expIn(config) {
  // Code...
};

module.exports = ClassName;

<强> exp2.js

const ClassName = require('exp1.js');

ClassName.expIn(/*config options*/);

答案 1 :(得分:0)

我通过在功能(红色)之外添加功能来解决此问题:

module.exports = function(RED) {
}

function expIn(config) { 
    //some code
}

然后像正常一样导出:

module.exports.expIn = expIn;

然后开始工作。 我不确定这是否正确,但是符合我的要求。