2017-06-15 4 views
0

Ich bin ziemlich neu in node.js.Node.js: db-Variable in Controller-Dateien verfügbar

Ich verwende derzeit Lowdb für meine Datenbank, während ich die App starte.

In den index.js Datei Ich habe:

var express = require('express'); 
var app = express(); 
var bodyParser = require('body-parser'); 
var request = require('request'); 
var path = require('path'); 
var low = require('lowdb'); 
var db = low('db.json'); 
var routes = require('./routes'); 

app.set('view engine', 'ejs'); 
app.set('views', path.join(__dirname, 'views')); 

app.use(express.static(path.join(__dirname, '/public'))); 
app.use('/', routes); 

server.listen(3000, function(){ 
    console.log('listening on port 3000'); 
}); 

Dann in meine Routen-Datei Ich habe so etwas wie:

var express = require('express'); 
var router = express.Router(); 
var account = require('./controllers/accounts.js'); 

router.post('/login', account.login); 

router.get('/', function(req, res){ 
    res.render('home'); 
}); 

module.exports = router; 

Und schließlich in meinem Konto Controller ich habe:

exports.login = function(req, res){ 
    var email = req.body.email; 
    var password = req.body.password; 
     ... 
} 

Das Routing zu Controller-System funktioniert. Allerdings muss ich von allen meinen gerouteten Controller-Funktionen (und möglicherweise auch woanders) auf das Lowdb-Objekt zugreifen.

Wenn in app.js I gesetzt:

global.db = db; 

Dann scheint es zu funktionieren, aber von dem, was ich gelesen habe, diese global Einstellung ist nicht die ideale Lösung. Was ist der geeignete Weg, um von den Controller-Dateien auf die db zugreifen zu können, ohne die db-Verbindung in jeder einzelnen Datei setzen zu müssen.

Antwort

0

In Ihrer index.js Datei (Anwendung root) speichert das lowdb Objekt in Ihrem express Objekt:

var app = express(); 
var db = low('db.json'); 
app.db = db; 

In Ihrem Controller (accounts.js), Zugriff auf Ihre Datenbank mit req.app.db:

exports.login = function(req, res){ 
    var email = req.body.email; 
    var password = req.body.password; 
    var db = req.app.db; 
} 
0

Es sieht Wie Sie können wahrscheinlich nur einrichten und verwenden Sie die db direkt in Ihrer Routen-Datei, da Sie nicht tatsächlich die db in Ihrer Hauptdatei verwenden. Wenn es so einfach ist, dann würde ich dafür, dass sich entscheiden:

// routes file 
var low = require('lowdb'); 
var db = low('db.json'); 

Alternativ, wenn Sie die Einrichtung Ihres db in der Hauptdatei müssen und es in die Routen-Datei übergeben und/oder andere Module, sondern die der ausführenden Router direkt in der Datei routes, export a function, die die db als Eingabe nimmt und die router zurückgibt. Dann können Sie die db in die Routen-Modul übergeben, wenn Sie require es.

// routes file 
module.exports = function (db) { 
    // router setup using the input `db` 
    // ... 
    return router; 
} 

// index.js 
var low = require('lowdb'); 
var db = low('db.json'); 
var routes = require('./routes')(db); 
Verwandte Themen