连接到数据库时无法读取未定义的属性(读取“use_env_variable”)

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

我尝试使用 Sequelize 和 NodeJS 连接数据库,但发生错误,无法连接到数据库。通过检查,我发现 “config”变量为 null 并且“config.use_env_variable”不是在“config/config.js”中构造的。

有人可以帮我知道出了什么问题以及如何解决吗?

在“models/index.js”文件中:

'use strict';
require('dotenv').config();
const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};
if (config == null){
console.log("config is null");
} else {
console.log('config is not null ');
}
// create instance to Connect DB
let sequelize;
...

在“config/config.js”文件中:

{
"development": {
"username": "root",
"password": null,
"database": "hoidanit",
"host": "127.0.0.1",
"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"
 }
}

我在“.env”文件中声明了两个变量:

PORT=8090
NODE_ENV=development

(请注意,我使用的是 Node.js v18.17.1、Sequelize v6.6.2 和 Sequelize-cli v6.2.0)。

"dependencies": {
"body-parser": "^1.19.0",
"dotenv": "^8.2.0",
"ejs": "^3.1.5",
"express": "^4.17.1",
"mysql2": "^2.2.5",
"sequelize": "^6.6.2"
},
"devDependencies": {
"@babel/core": "^7.12.10",
"@babel/node": "^7.12.10",
"@babel/preset-env": "^7.12.10",
"nodemon": "^2.0.7",
"sequelize-cli": "^6.2.0"
}

我尝试在“config.js”中添加变量“use_env_variable”,但什么也没发生。

node.js sequelize.js sequelize-cli
1个回答
0
投票

将 Sequelize 与 NodeJS 结合使用时,设置通常需要一个 JavaScript 文件作为配置。但就您而言,您似乎提供了

JSON
文件,因此,您无法包含
use_env_variable
设置。

在您的

config/config.js
中,将其重命名并将其从
JSON
重构为导出的 Javascript 对象。

use_env_variable
只是为了让
sequelize
更容易理解,如果无法从您之前提供的信息中获取

配置/config.js

require('dotenv').config();

module.exports = {
  development: {
    use_env_variable: 'DEV_DATABASE_URL',   // add this line
    username: process.env.DB_USER || "root",
    password: process.env.DB_PASSWORD || null,
    database: process.env.DB_NAME || "hoidanit",
    host: process.env.DB_HOST || "127.0.0.1",
    dialect: "mysql"
  },
  test: {
    use_env_variable: 'TEST_DATABASE_URL', 
    username: "root",
    password: null,
    database: "database_test",
    host: "127.0.0.1",
    dialect: "mysql"
  },
  production: {
    use_env_variable: 'PROD_DATABASE_URL', 
    username: "root",
    password: null,
    database: "database_production",
    host: "127.0.0.1",
    dialect: "mysql"
  }
}

.env

DEV_DATABASE_URL=mysql://USERNAME:PASSWORD@localhost:3306/DB_NAME

index.js

const config = require(__dirname + '/../config/config.js')[env];
© www.soinside.com 2019 - 2024. All rights reserved.