我正在将 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 中的值进行硬编码时,迁移确实有效。
我能想到尝试的一件事是强制设置 env 文件的路径(即使它应该默认使用 .env):
require('dotenv').config({
path: '.env'
});
这是假设您在与配置文件相同的根文件夹中有一个 .env 文件。