Knexfile 在命令行迁移期间未获取 .env 变量

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

我正在将 Knex 与 MySQL 数据库结合使用,并尝试使用 npx knex migrate:latest 迁移我的表。但是,当我运行命令时,出现以下错误:“用户 ''@'localhost' 的访问被拒绝(使用密码:NO)”。

这是我的 knexfile.js,它位于我的 .env 的根目录中:

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

const {
  DB_HOST: host,
  DB_NAME: database,
  DB_USER: user,
  DB_PASSWORD: password,
  TEST_DB_NAME: testDatabase,
} = process.env;

/**
 * @type { Object.<string, import("knex").Knex.Config> }
 */
module.exports = {
  development: {
    client: "mysql2",
    connection: {
      host,
      database,
      user,
      password,
      charset: "utf8",
    },
    migrations: {
      directory: path.join(__dirname, "/db/migrations"),
    },
    seeds: {
      directory: path.join(__dirname, "/db/seeds"),
    },
  },
  test: {
    client: "mysql2",
    connection: {
      host,
      database: testDatabase,
      user,
      password,
      charset: "utf8",
    },
    migrations: {
      directory: path.join(__dirname, "/db/migrations"),
    },
    seeds: {
      directory: path.join(__dirname, "/db/seeds"),
    },
  },
};

我尝试控制台记录所有环境变量,但它们都是未定义的。

当我对 knexfile.js 中的值进行硬编码时,迁移确实有效。

node.js knex.js mysql-connector dotenv
1个回答
0
投票

我能想到尝试的一件事是强制设置 env 文件的路径(即使它应该默认使用 .env):

require('dotenv').config({
    path: '.env'
});

这是假设您在与配置文件相同的根文件夹中有一个 .env 文件。

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