2017-05-28 4 views
1

Ich versuche db-Migrationen mit MySQL und Knex.Fehler: Zugriff verweigert für Benutzer '' @ 'localhost' (mit Passwort: NEIN)

Wenn ich den Befehl knex migrate:latest laufen, bekomme ich

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

Ich habe versucht, auf der Code-Basis ein Passwort Hinzufügen (zu ‚123‘ und ‚NO‘), obwohl das, was mich verwirrt ist, dass die meisten wie auch ich user: "root" in meiner Datenbank-Datei haben, gibt der Fehler eine leere Zeichenfolge als Benutzer ...

ich teilen, was ich mir vorstellen, die zugehörigen Dateien sind:

// 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'); 

// "Migration Definition"

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

Antwort

1

Als Fehlermeldung sagen, Sie sind Anmeldeversuch mit ungültigen Anmeldedaten Benutzer, dessen Name leer ist Zeichenfolge existiert nicht t in DB.

Das bedeutet, dass Ihre Konfiguration falsch ist. Sie haben einige seltsame Segment in Ihrem Knoten-mysql Treiberkonfiguration, die andere Datei zu verweisen versucht, die initialisierten Knex Instanz

client: 'mysql', 
    connection: { 
    filename: '/server/SQL/mysql_db' 
    } 

exportiert, die schlicht und einfach falsch ist. Das korrekte Format für knexfile ist ziemlich genau das selbe, das für die Erstellung der knex-Instanz verwendet wird, außer dass knexfile auch die Auswahl des Profils gemäß der Umgebungsvariablen NODE_ENV unterstützt.

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

In Ihrem mysql_db könnten Sie so etwas zu init Knex zu der Lage sein, die gleiche Konfiguration verwendet werden tun:

const knex = require('knex')(
    require('knexfile')[process.env.NODE_ENV || 'development'] 
); 
+0

Perfekt, das hat es behoben! Ich habe es so gemacht, weil ich beim Ausführen von 'knex init' die Code-Struktur, die mit' knexfile.js' als Beispiel für das Format geliefert wird, nach einem Dateinamenschlüssel in einem Objekt am Verbindungsschlüssel fragen muss. – jaimefps

Verwandte Themen