首页 > 解决方案 > 如何在同一个项目中设置开发数据库连接和生产 - Node JS + MongoDB + Mongoose

问题描述

我正在用 NODEJS 和 Mongodb 构建一些应用程序。我将我的提交推送到 github(开发)和 Heroku(生产)。每次我需要推送数据库连接时都必须进行更改,这令人沮丧:

const mongoose = require('mongoose');

// process.env.MONGODB_URI => for PRODUCTION HEROKU
// `mongodb://localhost/myProject` => for Local Development + GitHub Repo

mongoose.connect(**process.env.MONGODB_URI**, {family:4,useNewUrlParser: true, useUnifiedTopology: true, useFindAndModify:false, useCreateIndex:true })
  .then(ok => {
    console.log(`Connected to Mongo! Database name: "${ok.connections[0].name}"`)
  })
  .catch(err => {
    console.error('Error connecting to mongo', err)
  });

对于每种情况,我想在推送提交时创建某种功能来设置连接。

例如,这个逻辑:

mongoose.connect(if process.env.MONGODB_URI works, get it. If not, get this one: `mongodb://localhost/myProject`)

甚至更好:

if request is in http://localhost:3000/ => get this connection `mongodb://localhost/myProject
if not get this one => process.env.MONGODB_URI

我真的不想要一个解决方案,只是我想知道这是否可能,以及实现它的第一步。

谢谢。

标签: node.jsmongodb

解决方案


看看 dotenv https://www.npmjs.com/package/dotenv

确保在 .gitignore 中包含 .env 文件。

你不应该提交 .env 文件。开发人员通常会在 README 或类似的内部文档中列出运行程序所需的环境变量。

一些开发人员在源代码存储库中创建和维护一个 .sample-env 文件。此示例文件将列出应用程序使用的所有环境变量,例如:

主机=端口=

然后,开发人员将克隆存储库,将 .sample-env 文件复制到新的 .env 文件中并填写值。

如果您的应用程序在物理机或虚拟机上运行(例如,Digital Ocean droplets、Amazon EC2 和 Azure 虚拟机),那么您可以在登录到服务器时创建一个 .env,它会像完成后一样运行在您的本地计算机上。


推荐阅读