javascript - 将 Node.js/Mongo 应用程序从 Redhat Openshift2 升级到 Openshift3,mongodb URI 是什么?

标签 javascript node.js mongodb openshift

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

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

最佳答案

OpenShift (Kubernetes) 设置 environment variables创建 pod 时,适用于 pod 中的项目/命名空间中的所有服务。环境变量以相应的服务名称为前缀(服务名称转换为大写,破折号替换为下划线):

  • {SERVICE_NAME}_SERVICE_HOST
  • {SERVICE_NAME}_SERVICE_PORT

您的 Node.js 应用程序仍然需要知道您为 MongoDB 数据库服务命名的内容以及数据库的用户名/密码,因此您需要在 Node.js 部署配置中的环境变量中设置这些内容。

假设您将 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 sample app ):

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;
  }
}

关于javascript - 将 Node.js/Mongo 应用程序从 Redhat Openshift2 升级到 Openshift3,mongodb URI 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46062044/

相关文章:

javascript - indexOf() 在错误情况下显示 "-1"

ios - 为什么ios上传文件时没有调用nodejs multer上的onParseEnd回调?

c# - 无法使用接口(interface)确定 i => i.Id 的序列化信息

java - 使用 MongoDb 创建索引

javascript - mouseenter 功能只能垂直工作

javascript - Raphael.js 以给定的中心点为路径的旋转设置动画

javascript - 取决于两个 promise

javascript - 如何在node js中同时对日期和各个日期的值数组进行排序?

javascript - 让 JSON 对象在 NodeJS 中工作的问题

mongodb - 当并非所有字段都有值时加入字段