在我的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不是功能
我哪里出错了?
答案 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重新定义为函数表达式而不是对象。因此,我已经给出了书面答案,但是您需要对其进行编码。