579 Stimmen

ExpressJS Wie strukturiert man eine Anwendung?

Ich verwende das ExpressJS-Webframework für NodeJS.

Leute, die ExpressJS verwenden, legen ihre Umgebungen (Entwicklung, Produktion, Test...), ihre Routen usw. auf dem app.js . Ich denke, dass es nicht ein schöner Weg, weil, wenn Sie eine große Anwendung haben, app.js ist zu groß!

Ich möchte gerne diese Verzeichnisstruktur haben:

| my-application
| -- app.js
| -- config/
     | -- environment.js
     | -- routes.js

Hier ist mein Code:

app.js

var express = require('express');
var app = module.exports = express.createServer();

require('./config/environment.js')(app, express);
require('./config/routes.js')(app);

app.listen(3000);

config/environment.js

module.exports = function(app, express){
    app.configure(function() {
    app.use(express.logger());
    });

    app.configure('development', function() {
    app.use(express.errorHandler({
        dumpExceptions: true,
        showStack: true
    }));
    });

    app.configure('production', function() {
    app.use(express.errorHandler());
    });
};

config/routes.js

module.exports = function(app) {
    app.get('/', function(req, res) {
    res.send('Hello world !');
    });
};

Mein Code funktioniert gut und ich denke, dass die Struktur der Verzeichnisse schön ist. Allerdings musste der Code angepasst werden und ich bin mir nicht sicher, ob er gut/schön ist.

Ist es besser, meine Struktur von Verzeichnissen zu verwenden und den Code anzupassen oder einfach eine Datei (app.js) zu verwenden?

Vielen Dank für Ihre Ratschläge!

6voto

Renato Gama Punkte 15638

Ich habe genau zu diesem Thema einen Beitrag geschrieben. Er nutzt im Grunde eine routeRegistrar der die Dateien im Ordner durchläuft /controllers Aufruf seiner Funktion init . Funktion init nimmt den Express app als Parameter, damit Sie Ihre Routen nach Ihren Wünschen registrieren können.

var fs = require("fs");
var express = require("express");
var app = express();

var controllersFolderPath = __dirname + "/controllers/";
fs.readdirSync(controllersFolderPath).forEach(function(controllerName){
    if(controllerName.indexOf("Controller.js") !== -1){
        var controller = require(controllersFolderPath + controllerName);
        controller.init(app);
    }
});

app.listen(3000);

5voto

Ben Mordue Punkte 447

http://locomotivejs.org/ bietet eine Möglichkeit, eine mit Node.js und Express erstellte Anwendung zu strukturieren.

Von der Website:

"Locomotive ist ein Web-Framework für Node.js. Locomotive unterstützt MVC Muster, RESTful-Routen und Konventionen über die Konfiguration, während nahtlos mit jeder Datenbank und Template-Engine integriert werden kann. Locomotive baut auf Express auf und bewahrt die Leistungsfähigkeit und Einfachheit die man von Node gewohnt ist."

5voto

ulysses Punkte 639

Dies könnte von Interesse sein:

https://github.com/flatiron/nconf

Hierarchische node.js-Konfiguration mit Dateien, Umgebungsvariablen, Befehlszeilenargumenten und atomarer Objektzusammenführung.

4voto

diproart Punkte 762

1) Das Dateisystem Ihres Express-Projekts könnte so aussehen:

/ ...
/lib
/node_modules
/public
/views
      app.js
      config.json
      package.json

app.js - Ihr globaler Anwendungscontainer

2) Hauptdatei des Moduls (lib/mymodule/index.js):

var express = require('express');    
var app = module.exports = express();
// and load module dependencies ...  

// this place to set module settings
app.set('view engine', 'jade');
app.set('views', __dirname + '/views');

// then do module staff    
app.get('/mymodule/route/',function(req,res){ res.send('module works!') });

3) Modul in der Hauptdatei app.js verbinden

...
var mymodule = require('mymodule');
app.use(mymodule);

4) Beispiellogik

lib/login
lib/db
lib/config
lib/users
lib/verify
lib/
   /api/ 
   ...
lib/
   /admin/
      /users/
      /settings/
      /groups/
...
  • Am besten für Tests geeignet
  • Am besten für Skala
  • Getrennte Abhängigkeiten nach Modulen
  • Gruppierung der Route nach Funktionalität (oder Modulen)

tj sagt/zeigt auf Vimeo eine interessante Idee, wie man eine Express-Anwendung modularisiert - Modulare Webanwendungen mit Node.js und Express . Leistungsstark und einfach.

4voto

zevero Punkte 2054

Vor kurzem habe ich mich für Module als unabhängige Mini-Anwendungen entschieden.

|-- src
  |--module1
  |--module2
     |--www
       |--img
       |--js
       |--css
     |--#.js
     |--index.ejs
  |--module3
  |--www
     |--bower_components
     |--img
     |--js
     |--css
  |--#.js
  |--header.ejs
  |--index.ejs
  |--footer.ejs

Für jedes Modul stehen nun Routing (#.js), Views (*.ejs), js, css und Assets nebeneinander. Das Submodul-Routing wird in der übergeordneten #.js mit zwei zusätzlichen Zeilen eingerichtet

router.use('/module2', opt_middleware_check, require('./module2/#'));
router.use(express.static(path.join(__dirname, 'www')));

Auf diese Weise sind sogar Untermodule möglich.

Vergessen Sie nicht, die Ansicht auf das src-Verzeichnis zu setzen

app.set('views', path.join(__dirname, 'src'));

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X