2016-06-24 21 views
5

Nella mia app Node.js, sto cercando di connettermi a un database MySQL ospitato su Amazon.Errore nella libreria MySQL per Node.js

$ npm install mysql 

Il mio codice simile a questa:

var mysql  = require('mysql'); 
var connection = mysql.createConnection({ 
    host  : 'my amazon sql db', 
    user  : 'me', 
    password : 'secret', 
    database : 'my_db' 
}); 

connection.connect(); 

connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) { 
    if (err) throw err; 

    console.log('The solution is: ', rows[0].solution); 
}); 

connection.end(); 

posso collegarmi al mio DB MySQL utilizzando Workbench - quindi, sono abbastanza sicuro che le mie credenziali sono a posto.

Quando tento di collegarmi ricevo il seguente errore:

Connection.js:91 Uncaught TypeError: Net.createConnection is not a function

Debug del codice dalla libreria NPM - questo è dove l'errore è gettato in connection.js:

this._socket = (this.config.socketPath) 
    ? Net.createConnection(this.config.socketPath) 
    : Net.createConnection(this.config.port, this.config.host); 

Il connection.js ha una dipendenza:

var Net = require('net'); 

Sto eseguendo Node.js localmente sul mio computer Windows.

Qualcuno può dirmi cosa potrebbe causare questo errore?

creato un biglietto separato: Error thrown calling Node.js net.createConnection

+0

[Potrebbe essere utile] (https://github.com/mysqljs/mysql/issues/491) –

+0

Come hai eseguito il debug e trovato una causa sottostante è possibile che potrebbe esserci un problema con il nodo versione .js. Quale versione del nodo stai usando esattamente? –

+0

Il mio nodo è la versione 4.2.3 – user1526912

risposta

15

Il modulo net richiesto e utilizzato nel modulo nodo MySQL è una parte fondamentale di Node.js stessa. L'errore che stai ricevendo circa Net.createConnection non essendo una funzione significa che è in arrivo come un objet vuoto e l'errore è correlato a uno dei suoi commenti alla domanda:

I am testing my code within browser.

È necessario eseguire questo modulo particolare sul nodo. solo js, ​​non è possibile eseguirlo in un browser web.

Si potrebbe pensare una possibilità potrebbe essere quella di eseguire il codice attraverso un software come browserify o webpack modo da poter facilmente require('mysql') nel tuo browser, ma non funzionerà. Il modulo net che è una dipendenza principale del modulo mysql verrà trasformato in un oggetto vuoto {}. Questo non è un bug, è come dovrebbe funzionare. I browser non hanno implementazioni tcp generiche quindi non possono essere emulate. L'oggetto vuoto ha lo scopo di impedire che require('net') non funzioni su moduli che altrimenti funzionano nel browser.

Per evitare questo errore, è necessario eseguire questo codice in un ambiente Node.js puro, non in un browser. Un server semplice potrebbe servire a questo scopo poiché questo codice nel tuo client in un browser non può funzionare e aggiungerebbe un buco di sicurezza poiché tutto il lato client è manipolativo e in quanto tale non sicuro. Non vuoi esporre il tuo database sul lato client ma lo consumi solo.

+1

ma questo non succederebbe se eseguissi un localserver con express, vero? perché sto affrontando lo stesso errore e non riesco a trovare alcuna soluzione a questo problema. ma appare solo, se sto usando createConnection, se sto usando il pool, funziona brillantemente. – Dustin

Problemi correlati