2015-03-23 7 views
12

Ich habe auf einem hapi.js Anwendung arbeiten und haben die folgende Architektur:Hapi.js Anwendungsarchitektur

Database 
    --Models 
    --usermodel.js 
    --anothermodel.js 
Routes 
    --private 
    --controllers 
     --ctrl1.js 
     --ctrl2.js 
    --validators 
     --validatr1.js 
     --validtr2.js 
    --public 
    --controllers 
     --ctrl1.js 
     --ctrl2.js 
test 
    --dbtest.js 
    --functiontest.js 
server.js 

wir diese Struktur angenommen, wenn sie mit express arbeiten, aber ich beginne mit einer neuen Anwendung und fragte mich, ob es Ressourcen gibt, wo ich eine bessere Anwendungsstruktur finden kann? Ich habe auf der offiziellen Website nach hapi und anderen Ressourcen gesucht, konnte aber nichts Interessantes finden.

Jede Hilfe wird geschätzt. Vielen Dank.

+0

Normalerweise sie alle Quelle setzen Code in de '/ lib' Ordner. Hier ist ein Beispiel App sie für Workshops verwenden https://github.com/hapijs/hapchat – Osukaa

+0

Sie könnten auch einen Yeoman Generator https://github.com/jedireza/generator-hapi-style – Osukaa

+0

"besser" in welchem ​​Sinne? –

Antwort

7

Das Gute an Hapi ist, dass es Ihnen nicht vorschreibt, wie Sie Ihre Apps strukturieren sollten. Es liegt an dir, was auch immer Sinn in deinem Leben macht. Sie könnte werfen alles, was Sie in einem einzigen index.js Datei haben und immer noch verwenden Sie alle Funktionen hapi, aber Sie werden wahrscheinlich eine schwere Zeit haben, Lesen/Wartung dieser Haarball später.

Wenn diese Struktur, die Sie zuvor verwendet haben, für Ihre Anwendung immer noch sinnvoll ist, gibt es nichts, was Sie daran hindert, dieselbe oder eine ähnliche Struktur zu verwenden.

models - nur nicht-hapi bestimmten Knotenmodule, die

exports.getUser = function (id, callback) { 

    Db.get('users', id, callback) 
}; 

controllers zu Ihrem db sprechen - Module, die Route Handler

var User = require('../models/user'); 

exports.showUserPage = function (request, reply) { 

    User.getUser(request.params.id, function (err, user) { 

     if (err) { 
      throw err; 
     } 

     if (!user) { 
      return reply('User not found').code(404) 
     } 

     reply.view('user', user); 
    }); 
} 

validators exportieren - Module, die joi Schemas exportieren

exports.showUserPage = { 
    params: { 
     id: Joi.number().required() 
    } 
} 

server.js - wo man all das zusammen

var Hapi = require('hapi'); 

var server = new Hapi.Server(); 
server.connection({ port: 7843 }); 

server.route({ 
    method: 'GET', 
    path: '/users/{id}', 
    handler: require('./controller/users').showUserPage, 
    config: { 
     validate: require('./validators/users').showUserPage 
    } 
}); 

server.start(); 

Plugins kleben

Sie sollten wahrscheinlich Vorteil plugins nehmen, sie lassen Sie Ihre Anwendung in logische Stücke aufgeteilt. Sie können die obige Struktur trotzdem verwenden, aber in ein Plugin einfügen. Neue Funktionen, die Sie später hinzufügen, können innerhalb eines anderen Plug-Ins verwendet werden, wenn sie nicht miteinander verknüpft sind (Analytics, Store usw.). Auf diese Weise können Sie eine Microservice-Architektur erstellen, in der Sie einfach nur die spezifischen Teile Ihrer Anwendungen skalieren können, die skaliert werden müssen.

Was machen andere Leute?

Wenn Sie schauen es nur ändern, weil Sie können bereits mit hapi baute einen Blick auf ein paar Projekte nehmen und sehen, wie sie tun es:

3

Ich habe den Aufbau einer chat application und das folgende ist, was ich verwendet habe:

  1. Gruppe Controller/Validierer und Routen eines Unternehmens in einem Ordner.
  2. Gruppenprogramme im gemeinsamen Ordner.
  3. Behalten Sie Auth und verwandte Aufgaben in einem separaten Ordner.
  4. Behalten Sie separaten Ordner für Bootstrap-Aufgaben.
  5. Gruppieren Sie jeden Ordner mit index.js, der alle Dateien im Ordner als Klebstoff enthält.
  6. Fügen Sie package.json für jeden Ordner hinzu, um relativen Pfadzugriff zu vermeiden.
  7. Verwenden Sie dotenv, um Umgebungsvariablen zu laden.

Die Modularität wurde von Angular Artrichtlinien inspiriert Ich habe auf ein paar Stellen zu lesen, bei denen der Schwerpunkt auf Gruppierung Module von Unternehmen statt Funktionalitäten ist.

Es folgt mein Projekt Architektur:

auth 
-- index.js 
-- package.json 
modules 
    --user 
    --controller.js 
    --validator.js 
    --index.js 
    --group 
    --controller.js 
    --validator.js 
    --index.js 
    --index.js 
    --package.json 
database 
    --models 
    --user.js 
    --group.js 
    --index.js 
    --package.json 
bootstrap 
--users.js 
    --groups.js 
    --index.js 
    --package.json 
test 
    --user 
    --model.js 
    --route.js 
    --index.js 
    --index.js 
    --package.json 
app.js 
+0

Ich frage mich, warum 'auth' nicht in' Modulen' sein kann? –

Verwandte Themen