使用环境变量进行本地 sequelize 配置

Posted

技术标签:

【中文标题】使用环境变量进行本地 sequelize 配置【英文标题】:using an enviroment variable for local sequelize configuration 【发布时间】:2016-12-10 00:13:41 【问题描述】:

我希望使用 sequelize 在我的项目的 config.json 文件中使用环境变量。我正在使用 dotenv 在本地设置环境变量。我的 config.json 文件是这样的


  "development": 
    "username": process.env.DB_USER,
    "password": process.env.DB_PASS,
    "database": process.env.DB_DATABASE,
    "host": process.env.DB_HOST,
    "dialect": "mysql"
  ,
  "test": 
    "username": "root",
    "password": null,
    "database": "database_test",
    "host": "127.0.0.1",
    "dialect": "mysql"
  ,
  "production": 
    "use_env_variable": "JAWSDB_URL",
    "dialect": "mysql"
  

我遇到的问题是我无法在 config.json 文件中使用变量。看起来我可以使用“use_env_varable”键并将env变量用于我的连接字符串。所以我想我要么需要一种方法来找出我的本地 mysql 数据库的组合连接字符串,要么需要一种在 config.json 中使用变量的方法。有什么解决办法吗?

【问题讨论】:

【参考方案1】:

您应该将config.json 文件更改为config.js 模块,并确保require 位于最顶部的dotenv

require('dotenv').config(); // this is important!
module.exports = 
"development": 
    "username": process.env.DB_USERNAME,
    "password": process.env.DB_PASSWORD,
    "database": process.env.DB_DATABASE,
    "host": process.env.DB_HOST,
    "dialect": "mysql"
,
"test": 
    "username": "root",
    "password": null,
    "database": "database_test",
    "host": "127.0.0.1",
    "dialect": "mysql"
,
"production": 
    "username": "root",
    "password": null,
    "database": "database_production",
    "host": "127.0.0.1",
    "dialect": "mysql"

;

注意:更新您的 .sequelizerc 文件以匹配新的配置文件。

"config": path.resolve('./config', 'config.js'),

【讨论】:

只是预感,点击上面的链接查看如何从他们的文档.sequelizerc docs更新您的 .sequelizerc 文件 挣扎了一个小时后,尝试谷歌搜索并找到答案。我的问题解决了。谢谢【参考方案2】:

我为此做了很多工作。如果你运行heroku run bash,我不知道为什么 Sequelize 在环境中不使用生产。我能够通过根据JAWSDB_URL 而不是NODE_ENV 修改Sequelize 对象来使其工作。

require("dotenv").config();
const express = require("express")
const app = express();
let seq;

//express app configuration

if (process.env.JAWSDB_URL) 
    console.log("There is a JAWS DB URL")
    seq = new Sequelize(process.env.JAWSDB_URL)

else 
    seq = require("./models").sequelize

seq.sync().then(() => 
  app.listen(PORT, () => console.log('server started on port ' + PORT));
)

【讨论】:

【参考方案3】:

在根目录下创建一个 .sequelizerc 文件。

var path = require('path');
module.exports =  
'config': path.resolve('server/config', 'config.js'),
'models-path': path.resolve('server/models'),
'seeders-path': path.resolve('server/seeders'),
'migrations-path': path.resolve('server/migrations')

然后在 config 文件夹中创建 config.js。在 config.js 中使用以下代码

const dotenv = require("dotenv");
dotenv.config( path: "config.env" );

module.exports = 
  development: 
    username: process.env.DB_USERNAME,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_DBNAME,
    host: process.env.DB_HOST,
    dialect: process.env.DB_DIALECT,
    encrypt: process.env.DB_ENCRYPT,
    pool: 
      max: parseInt(process.env.DB_POOL_MAX),
      min: parseInt(process.env.DB_POOL_MIN),
      acquire: parseInt(process.env.DB_POOL_ACQUIRE),
      idle: parseInt(process.env.DB_POOL_IDLE),
    ,
  ,

然后运行迁移和播种。

【讨论】:

【参考方案4】:

假设您使用的是 Passport、Sequelize、MySql:

在通过 sequelize 设置的 index.js 文件中,查找这一行:

var sequelize = new Sequelize(config.database, config.username, config.password, config);

尝试将其更改为:

var sequelize = new Sequelize(process.env.DB_DATABASE, process.env.DB_USERNAME, process.env.DB_PASSWORD, config);

你的 .env 应该有:

DB_USERNAME:root (or whatever your username is)
DB_PASSWORD:NYB (whatever your password is)
DB_DATABASE:whatever_your_dbNameis_db

最后,根据您的护照策略设置,寻找以下内容:

user.sequelize.sync().then(function()
...

您需要放置:database:process.env.DB_DATABASE

user.sequelize.sync().then(function()
     database:"process.env.dbn"
...

这意味着您应该从 config.json 中删除该 key:value。

去应该很好,你不必转换任何东西。 Sequelize 会处理所有这些。

【讨论】:

我忘记添加的一件事是您可能必须删除(重置)您的数据库/表才能完成这项工作。【参考方案5】:

您也可以使用 use_env_variable 进行开发。您似乎已经在使用 dotenv,所以我假设您已经设置了一个 .env 文件。只需添加这一行:

LOCALDB=mysql://[user]:[pass]@[sqldomain]/[db name]

根据需要替换 [] 中的内容,并在您的配置文件中将“use_env_variable”设置为 LOCALDB,就像您将 JAWSDB 用于生产一样。

【讨论】:

以上是关于使用环境变量进行本地 sequelize 配置的主要内容,如果未能解决你的问题,请参考以下文章

面面观 | docker下开发,修改环境变量启动jetty

java环境配置和开发软件Eclipse如何安装,详细说明下,包过环境变量设置?谢谢

在 SSH 中缺少 Elastic Beanstalk 环境变量

CC2B本地环境搭建步骤及部署问题解决

前端环境变量及vite中本地环境配置实践

Java开发本地环境搭建:JDKMaven环境配置