我正在尝试使用MySQL和Knex进行数据库迁移。
当我运行命令knex migrate:latest
时,我得到了
ER_ACCESS_DENIED_ERROR: Access denied for user ''@'localhost' (using password: NO)
我已尝试在代码库上添加密码(对于' 123' NO'),尽管令我最困惑的是,即使我有{{1在我的数据库文件中,错误给出了一个空字符串作为用户...
我分享我想象的相关文件:
// mysql_db.js
user: "root"
// knexfile.js
const knex = require('knex')({
client: 'mysql',
connection: {
host: 'localhost',
user: 'root',
password: '',
database: 'SQL_Data',
},
});
module.exports = knex;
// knex.js
const path = require('path');
module.exports = {
development: {
client: 'mysql',
connection: {
filename: '/server/SQL/mysql_db',
},
migrations: {
directory: path.join(__dirname, '/server/SQL/migrations'),
},
seeds: {
directory: path.join(__dirname, '/server/SQL/seeds'),
},
},
};
//"迁移定义"
const environment = proces.env.NODE_ENV || 'development';
const config = require('../../knexfile.js')[environment];
module.exports = require(knex)('config');
答案 0 :(得分:2)
正如错误消息所示,您尝试使用无效凭据登录时,其名称为空的用户不会在DB中存在字符串。
这意味着您的配置错误。你的node-mysql驱动程序配置中有一些奇怪的段,它试图引用其他文件,导出初始化的knex实例
client: 'mysql',
connection: {
filename: '/server/SQL/mysql_db'
}
这是完全错误的。 knexfile的正确格式与用于创建knex实例的格式基本相同,只是knexfile还支持根据NODE_ENV
环境变量选择配置文件。
const path = require('path');
module.exports = {
development: {
client: 'mysql',
connection: {
host: 'localhost',
user: 'root',
password: '',
database: 'SQL_Data',
},
migrations: {
directory: path.join(__dirname, '/server/SQL/migrations'),
},
seeds: {
directory: path.join(__dirname, '/server/SQL/seeds'),
},
},
};
在你的mysql_db中你可能想做类似的事情来初始化knex 能够使用相同的配置:
const knex = require('knex')(
require('knexfile')[process.env.NODE_ENV || 'development']
);