将变量传递到NodeJS是否需要设置?

时间:2019-06-26 21:19:38

标签: javascript node.js module node-modules

在我的nodeJS应用程序中,我试图建立一个连接到我的外部服务的帮助程序库。

我想去


    const client = require('./myService')(serviceKey);

在应用中,我希望能够调用多个功能,例如:


    var healthcheckState = client.healthcheck();
    var functionOneBool = client.someFunction('variable0','variable1');

我找到了一些有关如何执行此操作的SO帖子; How to pass variables into NodeJS modules? How can I pass a variable while using `require` in node.js?

但是我不知道如何适应它们。

这是myService.js


    module.exports = function(serviceKey) {
        var modules = {};
        modules.healthcheck = {
            function(){
                console.log('I have a heartbeat!');
            }
        };
        return modules;
      };

当我尝试运行时:


    const client = require('./myService')('abc123');
    client.healthcheck();

我被告知 client.healthcheck不是功能

我哪里出错了?

2 个答案:

答案 0 :(得分:1)

您的代码中有一个语法错误。 您正在创建一个modules对象,在Object模块中,您正在创建一个没有任何键的对象,并且将function作为值。

基本上,您正在制作:obj = { healthcheck: { func } };一定是obj = { healthcheck: func }

module.exports = function(serviceKey) {
    const modules = {};
    modules.healthcheck = function(){
            console.log('I have a heartbeat!');
        }
    return modules;
};

答案 1 :(得分:0)

为此情况设置单元测试不是理想的测试。在您的服务上放置setter函数怎么办?

let client = require('./myService');
client.setServiceKey('abc123');
// or
client.setServiceKey(process.env.SERVICE_KEY);

let myReturnValue = client.myDifferenctCalls();

然后,您可以设置一个不错的,tokenValid或tokenNotValid单元测试来配合它。

接下来通过1考虑。您的require方法返回一个值,在您的情况下,其返回模块作为myService.js中的对象,您还设置了“ healthcheck”属性,您将其定义为< strong> object 。到目前为止,我们看到您正在返回:“模块”作为对象,而prop模块.healthcheck作为对象。因此,您的modules.healthcheck作为对象不是[[callable]],因此不是函数。至少到目前为止,您应该将module.healthcheck重新定义为函数表达式而不是对象。因此,我已经给出了书面答案,但是您需要对其进行编码。