2017-05-28 74 views
1

我正在嘗試使用MySQL和Knex進行數據庫遷移。錯誤:拒絕訪問用戶'''localhost'(使用密碼:否)

當我運行命令knex migrate:latest,我得到

ER_ACCESS_DENIED_ERROR: Access denied for user ''@'localhost' (using password: NO)

我試過的代碼庫添加密碼(以「123」和「NO」),但什麼我最困惑的是,正如我在我的數據庫文件user: "root",錯誤給出了一個空字符串作爲用戶...

我分享我想象什麼是相關文件:

// mysql_db.js

const knex = require('knex')({ 
    client: 'mysql', 
    connection: { 
    host: 'localhost', 
    user: 'root', 
    password: '', 
    database: 'SQL_Data', 
    }, 
}); 

module.exports = knex; 

// knexfile.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'), 
    }, 
    }, 
}; 

//knex.js

const environment = proces.env.NODE_ENV || 'development'; 
const config = require('../../knexfile.js')[environment]; 
module.exports = require(knex)('config'); 

// 「遷移定義」

exports.up = (knex, Promise) => knex.schema.createTable('sql_table', ((table) => { 
    table.increments(); 
    table.string('name').notNullable(); 
    table.string('email').notNullable(); 
    table.string('description').notNullable(); 
    table.string('url').otNullable(); 
})); 

exports.down = (knex, Promise) => knex.schema.dropTable('sql_table'); 
+0

http://perkframework.com/v1/guides/database -migrations-knex.html – Hackerman

回答

1

由於錯誤消息說你是試圖用無效憑據登錄用戶名爲空的用戶字符串不存在t在DB中。

這意味着你的配置是錯誤的。你有你的節點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'] 
); 
+0

完美,修復它!我這樣做是因爲在運行'knex init'時,就是'knexfile.js'附帶的代碼結構作爲格式的一個例子,在連接關鍵字的對象內請求一個文件名鍵。 – jaimefps

相關問題