2012-09-10 6 views
5

Zunächst einmal bin ich ein völlig neuer Entwickler in Bezug auf Node.js.NodeJS erfordert Module

Ich habe angefangen, eine Beispiel-Express-Anwendung zu erstellen, und ich wollte ein zusätzliches Modul verwenden, um mehr darüber zu erfahren. Ich habe via npm das "mysql" -Modul installiert, alles in Ordnung.

Ich habe es am Anfang der App ist, wie folgt aus:.

var mysql = require('mysql'); 

jetzt, wie Sie bereits wissen, Express eine index.js Datei im Verzeichnis Routen erstellt: ich möchte Lage sein, den mysql Variable Zugriff auf die db dieser index.js Seite aber mit dem Befehl

var connection = mysql.createConnection({ 
    host  : 'localhost', 
    user  : 'root', 
    password : 'root', 
}); 

offensichtlich nicht funktioniert, so dass die verbinden „500 Reference: mysql ist nicht definiert“.

Natürlich bin ich sicher, dass ich diese Variable weitergeben muss, aber ich habe wirklich keine Ahnung, kann eine gute Seele mich erleuchten? Ich weiß, das ist eine sehr kleine und einfache Sache, aber ich versuchte, das schon, und scheint nicht zu funktionieren:

... app.get('/', routes.index, mysql); ... 

und auf index.js:

exports.index = function(req, res, mysql){ ... 

Antwort

5

In Node.js, Sie sollten require Module in den Dateien, in denen Sie sie verwenden müssen; so, wenn Sie das mysql Paket in Ihrer routes/index.js Datei, an der Spitze der Datei verwenden mögen, tun

var mysql = require('mysql'); 

Sie können am Ende ein Modul in mehr als eine Datei erfordern; Dies ist normal und in vielerlei Hinsicht eine gute Sache (keine Namespacing Fragen, etc.)

Wenn Sie mehr über Module und Pakete erfahren möchten, können Sie in diesen beiden Screencasts interessieren:

0

Vorbei an das mysql Objekt durch app.get() würde eine normale Reaktion sein, aber ich bin mir ziemlich sicher, dass Sie ov er denkt es.

Es ist so einfach wie einschließlich var mysql = require('mysql'); an der Spitze routes/index.js. In der Tat können Sie feststellen, dass Sie nicht einmal mysql in app.js benötigen müssen, wenn alle Datenbank-Interaktionen in Ihren Routen durchgeführt werden.