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

问题描述 投票:0回答:7

我希望使用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 中的变量的方法。有什么解决办法吗?

mysql json node.js environment-variables sequelize.js
7个回答
97
投票

您应该将

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'),

2
投票

我在这方面花了相当多的时间。我不知道为什么 Sequelize 在运行

heroku run bash
时不使用生产环境。我能够通过根据
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));
})

1
投票

在根目录下创建一个.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),
    },
  },

之后运行迁移和播种机。


0
投票

假设您使用 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 将处理所有这一切。


0
投票

这是我的 config.js 文件的样子:

const fs = require('fs');
require('dotenv').config();

module.exports = {
  "development": {
    "username": process.env.DB_USERNAME,
    "password": process.env.DB_PASSWORD,
    "database": process.env.DB_DATABASE,
    "host": process.env.DB_HOST,
    "dialect": process.env.DB_CONNECTION
  },
  "test": {
    "username": process.env.DB_USERNAME,
    "password": process.env.DB_PASSWORD,
    "database": process.env.DB_DATABASE,
    "host": process.env.DB_HOST,
    "dialect": process.env.DB_CONNECTION
  },
  "production": {
    "username": process.env.DB_USERNAME,
    "password": process.env.DB_PASSWORD,
    "database": process.env.DB_DATABASE,
    "host": process.env.DB_HOST,
    "dialect": process.env.DB_CONNECTION
  }
};

0
投票

在项目根目录下创建.env文件

第01步:config/config.json 重命名为 config/config.js (将Json文件更改为javaScript文件)

require('dotenv').config();

module.exports = {

    "development": {
        username :process.env.DB_USERNAME,
        password: process.env.DB_PASSWORD,
        database: process.env.DB_NAME,
        host : process.env.DB_HOST,
        "dialect": "mysql"
    },
    "production": {
        username :process.env.PRO_DB_USERNAME,
        password: process.env.PRO_DB_PASSWORD,
        database: process.env.PRO_DB_NAME,
        host : process.env.PRO_DB_HOST,
        "dialect": "mysql"
     }
 }

STEP 02: 在项目根目录中创建 .sequelizerc 文件 (打开 .sequelizerc 文件并粘贴到下面的代码块)

const path = require('path');

module.exports = {
    'config' : path.resolve('database/config','config.js'),
    'models-path' : path.resolve('database','models'),
    'migrations-path' : path.resolve('database','migrations'),
}

注意:我删除了 Seeder 文件夹,这就是为什么我没有提到 播种机路径

path.resolve(argument1 , argument2)函数有两个参数。

参数1是续集初始化的文件夹名称 参数 2 是初始化文件夹中的特定子文件夹

第03步:打开models文件夹index.js文件

const config = require(__dirname + '/../config/config.js')[env];

将文件扩展名 config/config.json 更改为 config/config.js

最后将数据库详细信息添加到.env文件中并使用sequelize-cli迁移注释

黑客快乐❤


-1
投票

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

LOCALDB=mysql://[用户]:[密码]@[sqldomain]/[数据库名称]

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

© www.soinside.com 2019 - 2024. All rights reserved.