2017-03-08 2 views
0

Ich bin ziemlich neu zu Express.js, aber, habe ein paar Apps geschrieben. Ich habe immer Ende-up in meiner app.js Datei in die Datenbank verbinden und die DB-Verbindung zu jedem Request-Objekt angehängt wird, wie folgt:Express.js separates Modell, Ansicht und Controller

var mongo = require('mongodb'); 
var monk = require('monk'); 
var db = monk('localhost:27017/db'); 

app.use(function(req,res,next) { 
    req.db = db; 
    next(); 
}); 

Dann Innenseite meiner Route Dateien würde ich folgendes tun:

var express = require('express'); 
var router = express.Router(); 

router.get('/', function(req,res,next) { 

    var db = req.db; 
    var person = db.get('person'); 

    person.find({}, {}, function(err, docs) { 
     if (err) { console.log("error"); } 

     res.status(200); 
     res.send(JSON.stringify(docs)); 
     res.end(); 
    }); 
}); 

Allerdings gehe ich durch eine alte Anwendung, die ich erstellt habe Ich möchte das Modell von meinen Routendateien trennen. Zum Beispiel mit dem obigen Beispiel fort würde Ich mag Lage sein, etwas zu tun:

var person = require('./person-model'); 

router.get('/', function(req,res,next) { 
    var list = person.get(); 

    res.status(200); 
    res.send(JSON.stringify(list); 
    res.end(); 
}); 

Was ist der beste Weg, um diesen Ansatz auszuführen? Sollte ich ein Versprechen vom Modell zurückgeben?

Danke für jede Hilfe! Dennis

Antwort

0

Sie können alle Modellteile der Datei herausziehen und sie in eine neue einfügen, wo immer es in Ihrer Projektstruktur sinnvoll ist. Dann können Sie, unabhängig von den Methoden, die Sie verwenden müssen, ein Objekt einfügen, das Sie in Verbindung mit module.exports verwenden. Wenn Sie beispielsweise nur die db exportieren möchten, können Sie einfach module.exports auf das Objekt db setzen.

var mongo = require('mongodb'); 
var monk = require('monk'); 
var db = monk('localhost:27017/db'); 

module.exports = db; 

Dann in Ihre Routen-Datei können Sie etwas tun:

var person = require("./models/person-model.js"); 

router.get('/', function(req,res,next) { 
    var list = person.get(); 

    res.status(200); 
    res.send(JSON.stringify(list); 
    res.end(); 
}); 
+0

Ok. Nehmen wir in der Datei person-model.js jedoch an, dass ich eine get() - Funktion implementiere. Würde ich das Versprechen erwidern? Oder das Array von Ergebnissen? Zum Beispiel würde ich person.find ({}, {}) zurückgeben; Oder würde das Versprechen im Modell verarbeiten und die Ergebnisse zurückgeben person.find ({}, {}). Then() {.. return [Array der Ergebnisse]} –

+0

Das liegt wirklich an Ihnen, wie Sie es implementieren möchten. Wenn es sich um eine asynchrone Operation handelt, ist es wahrscheinlich am besten, die Zusage zurückzugeben, insbesondere, weil das Zurückgeben eines Arrays aus einem konsumierten Versprechen die Ausführung nicht blockiert, bis es abgeschlossen ist. –

Verwandte Themen