将Node.js / Mongo应用从Redhat Openshift2升级到Openshift3,MongoDB的URI是什么?

我想我已经在我的Openshift3“Starter”帐户上成功安装了node.js和mongoDB。

在Openshift2中曾经有一个完整的MONGODB URL环境variables。 现在似乎只有一个USER和PASSWORDvariables。 我如何知道服务器,端口等?

OpenShift(Kubernetes)在创build窗格时为您的窗格中的项目/命名空间中的所有服务设置环境variables 。 环境variables的前缀是相应的服务名称(服务名称转换为大写,破折号用下划线replace):

  • {SERVICE_NAME}的_SERVICE_HOST
  • {SERVICE_NAME}的_SERVICE_PORT

您的Node.js应用程序仍然需要知道您为MongoDB数据库服务命名了什么,以及数据库的用户名/密码,因此您需要在Node.js部署configuration中设置环境variables。

假设你命名你的Node.js服务nodejs-ex ,你的数据库服务mongodb ,你的数据库sampledb ,你的用户名和密码pass

 $ oc set env dc/nodejs-ex DATABASE_SERVICE_NAME=mongodb \ MONGODB_DATABASE=sampledb \ MONGODB_PASSWORD=pass \ MONGODB_USER=user 

而且,在你的应用程序的某个地方(基于Node.js示例应用程序 ):

 if (process.env.DATABASE_SERVICE_NAME) { var mongoServiceName = process.env.DATABASE_SERVICE_NAME.toUpperCase(), mongoHost = process.env[mongoServiceName + '_SERVICE_HOST'], mongoPort = process.env[mongoServiceName + '_SERVICE_PORT'], mongoDatabase = process.env[mongoServiceName + '_DATABASE'], mongoPassword = process.env[mongoServiceName + '_PASSWORD'] mongoUser = process.env[mongoServiceName + '_USER']; if (mongoHost && mongoPort && mongoDatabase) { mongoURL = 'mongodb://'; if (mongoUser && mongoPassword) { mongoURL += mongoUser + ':' + mongoPassword + '@'; } mongoURL += mongoHost + ':' + mongoPort + '/' + mongoDatabase; } }