node.js - 如何在同一个项目中设置开发数据库连接和生产 - 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
我真的不想要一个解决方案,只是我想知道这是否可能,以及实现它的第一步。
谢谢。
解决方案
看看 dotenv https://www.npmjs.com/package/dotenv
确保在 .gitignore 中包含 .env 文件。
你不应该提交 .env 文件。开发人员通常会在 README 或类似的内部文档中列出运行程序所需的环境变量。
一些开发人员在源代码存储库中创建和维护一个 .sample-env 文件。此示例文件将列出应用程序使用的所有环境变量,例如:
主机=端口=
然后,开发人员将克隆存储库,将 .sample-env 文件复制到新的 .env 文件中并填写值。
如果您的应用程序在物理机或虚拟机上运行(例如,Digital Ocean droplets、Amazon EC2 和 Azure 虚拟机),那么您可以在登录到服务器时创建一个 .env,它会像完成后一样运行在您的本地计算机上。
推荐阅读
- javascript - 如何动态创建引导表?
- oracle - 创建表特权是否赋予对象特权,例如选择和删除?
- python - 接收未知数量参数的 Python 函数
- composer-php - 如何让 composer.json 脚本接受标志
- python - 为 mathplotlib.pyplot 直方图指定 x 轴上的值
- css - 在撰写新电子邮件时自定义电子邮件背景
- javascript - 将模态表单重定向到我的 php 脚本
- jquery - 如何将 Ajax Json 中的多个复选框值提交到 Flask?
- google-bigquery - 无法查询完整数据集
- ruby-on-rails - 设计重定向错误:“过滤器链因 :check_user 呈现或重定向而停止”