我在 Bluemix 上有一个 Message Hub 服务实例,我试图通过节点应用程序连接到该实例。我可以通过文档中给出的 cfenv 进行连接:
var Cfenv = require('cfenv');
var appEnv = Cfenv.getAppEnv();
if(restEndpoint && apiKey) {
appEnv.services = {
"messagehub": [
{
"label": "messagehub",
"credentials": {
"api_key": apiKey,
"kafka_rest_url": restEndpoint,
}
}
]
};
} else {
console.error('A REST Endpoint and API Key must be provided.');
process.exit(1);
}
为此,我直接在我的节点应用程序中提供 API 密钥和 restEndpoint,它们是在 Bluemix 服务凭证中创建的。
restEndpoint = "https://kafka-rest-**************"
apiKey = "*******************"
但是为了安全起见,我不想在代码本身中给出上述细节。那么无论如何我可以阻止提供上述凭据并调用服务吗?我开始知道我们可以使用 cfenv 和 VCAP_serives 来实现它,但我不知道如何去做。有人可以帮我一些想法吗?
我在这里自己编辑我的问题,我使用 cfenv 从我的节点应用程序连接到消息中心服务,但是这些值是硬编码的,如下所示。
restEndpoint = "https://kafka-rest-***************************"
apiKey = "******************************"
if(restEndpoint && apiKey) {
appEnv.services = {
"messagehub": [
{
"label": "messagehub",
"credentials": {
"api_key": apiKey,
"kafka_rest_url": restEndpoint,
}
}
]
};
} else {
console.error('A REST Endpoint and API Key must be provided.');
process.exit(1);
}
var instance = new MessageHub(appEnv.services);
但是现在在推送到 bluemix 之后,我得到了环境变量(VCAP 服务)作为
"messagehub": [
{
"credentials": {
"mqlight_lookup_url": "https://mqlight*********",
"api_key": "**************",
"kafka_admin_url": "https://kafka-admin-***********",
"kafka_rest_url": "https://kafka-rest-********",
"user": "*****",
"password": "*******"
},
"syslog_drain_url": null,
"label": "messagehub",
"provider": null,
"plan": "standard",
"name": "Message Hub",
"tags": [
"ibm_dedicated_public",
"web_and_app",
"ibm_created"
]
}
]
那么如何使用上述 VCAP_services 连接到消息中心服务,而不是硬编码代码本身中的值。
谢谢。