2015-05-15 4 views
6

Uso lato server Node.js. Ho provato il mio codice su localhost e tutto funziona bene. Ho comprato un server e installato Apache e node.js su di esso e testare la mia applicazione web lì. Ho modificato correttamente le configurazioni delle connessioni MySQL da localhost alle configurazioni del server.Node.js MySQL - Errore: connessione ECONNREFUSED

a testare la mia applicazione web con questa configurazione:

var mysql  = require('mysql'); 
var mysqlConnection; 
function new_mysqlConnection() { 
    mysqlConnection = mysql.createConnection({ 
     host  : 'myurl.at', 
     user  : 'myusername', 
     database : 'mydatabase', 
     password : 'mypassword' 
    }); 
} 

ho avviare il server node.js con:

$ node server.js 

Quando carico della pagina, è visualizzato correttamente, ma quando Node. js tenta di connettersi al database ho sempre avuto il seguente errore:

Error: connect ECONNREFUSED 
    at errnoException (net.js:905:11) 
    at Object.afterConnect [as oncomplete] (net.js:896:19) 
    -------------------- 
    at Protocol._enqueue (/var/www/node_modules/mysql/lib/protocol/Protocol.js:135:48) 
    at Protocol.handshake (/var/www/node_modules/mysql/lib/protocol/Protocol.js:52:41) 
    at Connection.connect (/var/www/node_modules/mysql/lib/Connection.js:119:18) 
    at reconnectDb (/var/www/server.js:319:18) 
    at app.get.email (/var/www/server.js:109:2) 
    at Layer.handle [as handle_request] (/var/www/node_modules/express/lib/router/layer.js:82:5) 
    at trim_prefix (/var/www/node_modules/express/lib/router/index.js:302:13) 
    at /var/www/node_modules/express/lib/router/index.js:270:7 
    at Function.proto.process_params (/var/www/node_modules/express/lib/router/index.js:321:12) 
    at next (/var/www/node_modules/express/lib/router/index.js:261:10) 
+1

L'host è sbagliato oppure è necessario specificare un numero di porta. Qual è la porta su cui è in esecuzione mysqld? Dopo averlo risolto, un'altra possibilità è che le porte del tuo host siano bloccate. Che tipo di rete stai collegando? In genere ci colleghiamo tramite localhost, o una rete interna, e non Internet. – beiller

+0

@beiller Innanzitutto vorrei ringraziarvi per la vostra risposta veloce. Ho già provato con l'impostazione della porta nella configurazione, ma non ha funzionato. Mysql eseguito su questa porta: 'tcp 0 0 127.0.0.1:3306 0.0.0.0:* ASCOLTA 4322/mysqld' Il mio server.js è in esecuzione sulla porta 2000, se entrambi sono in esecuzione sulla stessa porta? Cosa intendi con "che tipo di rete stai collegando?" Carro armato! – Nico

+0

No, non funzionano sulla stessa porta. Il tuo messaggio di errore significa in sostanza "la tua connessione è stata negata dal sistema operativo" IE non ti sei mai avvicinato a toccare il server mysql. Chiedendo quale rete, chiedo, è mysql e il tuo nodo.l'applicazione js in esecuzione sullo stesso server fisico? – beiller

risposta

13

È necessario aggiungere il valore di socket path all'oggetto config:

socketPath: '/var/run/mysqld/mysqld.sock' 

In MAMP, si va a http://localhost:8888/MAMP, e si trovano:

/Applications/MAMP/tmp/mysql/mysql.sock 

Alla fine si ha:

var connection = mysql.createConnection({ 
    host  : config.host, 
    user  : config.user, 
    password : config.pass, 
    database : config.db, 
    socketPath: '/Applications/MAMP/tmp/mysql/mysql.sock' 
}); 
4

Verificare la presenza di MySQL porta nel tuo server.

In MAMP, per impostazione predefinita utilizza 8889.

aggiungere che, per la vostra configurazione di connessione.

La tua configurazione di MySQL dovrebbe apparire così.

this.pool = mysql.createPool({ 
    connectionLimit: 10, 
    host: 'localhost', 
    user: 'root', 
    password: 'root', 
    database: 'todo', 
    port: '8889' 
}); 
0

ho anche lo stesso problema in Google Cloud con nginx

cambiato

host: 'localhost' 

a

host : 'cloud_instance_private_ip'

può aiutare qualcuno con lo stesso problema