2013-07-05 10 views
6

Ich arbeite an einem Projekt, das AngularJS und Socket.io verwendet. Ich fand this sehr schönes Beispiel für die Integration.Wie wird das Node/Angular/Socket.io-Projekt strukturiert?

Dies ist die Projektstruktur:

app.js     --> app config 
bower.json    --> for bower 
package.json   --> for npm 
public/     --> all of the files to be used in on the client side 
    css/     --> css files 
    app.css    --> default stylesheet 
    img/     --> image files 
    js/     --> javascript files 
    app.js    --> declare top-level app module 
    controllers.js  --> application controllers 
    directives.js  --> custom angular directives 
    filters.js   --> custom angular filters 
    services.js   --> custom angular services 
    bower_components/ 
    angular/   --> angular.js 
    angular-socket-io/ --> socket.io adapter for angular 
routes/ 
    index.js    --> route for serving HTML pages and partials 
    socket.js    --> serve content over a socket 
    api.js    --> serve JSON to our AngularJS client 
views/ 
    index.jade   --> main page for app 
    layout.jade   --> doctype, title, head boilerplate 
    partials/    --> angular view partials (partial jade templates) 
    partial1.jade 
    partial2.jade 

in app.js:

var express = require('express'), 
    routes = require('./routes'), 
    api = require('./routes/api'), 
    socket = require('./routes/socket'); 

... 

// serve index and view partials 
app.get('/', routes.index); 
app.get('/partials/:name', routes.partials); 

// JSON API 
app.get('/api/name', api.name); 

// redirect all others to the index (HTML5 history) 
app.get('*', routes.index); 

// Socket.io Communication 
io.sockets.on('connection', require('./routes/socket')); 

Jetzt, während normalerweise würde ich in app.js die Serverlogik setzt nur scheint es, dass hier die Logik geteilt zwischen api.js, socket.js und index.js - Ich mag das sehr.

aber lassen Sie uns sagen, dass in socket.js Ich brauche in api.js definiert etwas zu verwenden .. sollte ich eine var api = require('./api'); in socket.js hinzufügen?

+2

Haben Sie den Generator-eckigen für Yeoman betrachtet? Dies wird dir helfen, deine App zu strukturieren. –

+1

Ja, die Client-Seite ist kein Problem. eckig ist ziemlich cool :) Problem war die Server-Seite .. Ich endete beim Erstellen von Modulen/Objekten, Importieren von allem in die 'app.js' und übergeben sie durch Verweis zueinander (wenn nötig) .. :) – fusio

Antwort

-1

Ich landete Module/Objekte zu schaffen, alles in die app.js importieren und durch Bezugnahme vorbei zueinander sind (wenn erforderlich) ..

var mashup = require('./routes/mashupModule'), 
    socket = require('./routes/socketModule'), 
    browser = require('./routes/browserModule'); 

    socket.init(server, browser, mashup); 
    browser.init(socket, mashup); 

Nicht sicher, ob dies der beste Weg ist, zu haben, eine Art von Trennung im Code .. Ich bin zu Java gewöhnt, und es ist saugt, dass in JS ist es in der Regel eine große Quelldatei ..

+1

Eigentlich , eine große Quelldatei ist nur eine Möglichkeit, Dinge zu tun. Im Gegensatz zu Java können Sie (fast immer) tun, was Sie wollen, und die Dinge so organisieren, wie es Ihren Anforderungen entspricht. Natürlich gibt es überall Best Practices und Samen, aber es liegt an dir. Ich denke, jemand hat deine Antwort abgelehnt, weil du nur wenig Informationen darüber geliefert hast, was du getan hast. Vielleicht werden diese Module korrekt importiert und per Referenz weitergegeben, vielleicht nicht. Vielleicht würde eine bessere Erklärung oder mehr Code helfen. –