2013-07-05 1 views
6

Je travaille sur un projet qui utilise AngularJS et Socket.io. J'ai trouvé this très bel exemple d'intégration.Comment structurer le projet Node/Angular/Socket.io?

C'est la structure du projet:

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 

dans 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')); 

Maintenant, alors que normalement je voudrais juste mettre la logique du serveur dans app.js il semble que la logique ici est divisée entre api.js, socket.js et index.js - J'aime bien ça.

Cependant, disons que dans socket.js je dois utiliser quelque chose défini dans api.js .. dois-je ajouter un var api = require('./api'); à socket.js?

+2

Avez-vous regardé le générateur-angulaire pour Yeoman? Cela vous aidera à structurer votre application. –

+1

Oui, le côté client ne pose aucun problème. angulaire est assez cool :) Problème était le côté serveur .. J'ai fini par créer des modules/objets, en important tout dans le 'app.js' et en les passant par référence les uns aux autres (si nécessaire) .. :) – fusio

Répondre

-1

J'ai fini par créer des modules/objets, importer tout dans les app.js et les faisant passer par référence à l'autre (si nécessaire) ..

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

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

Pas sûr que ce soit la meilleure façon d'avoir une sorte de séparation dans le code .. Je suis habitué à Java, et il suce que dans JS c'est généralement un gros fichier source ..

+1

En fait , un gros fichier source est juste une façon de faire les choses. Contrairement à Java, vous pouvez (presque toujours) faire ce que vous voulez et organiser les choses selon vos besoins. Bien sûr, il y a des bonnes pratiques et des graines tout autour, mais c'est à vous de décider. Je pense que quelqu'un a rejeté votre réponse parce que vous avez fourni peu d'informations sur ce que vous avez fait. Peut-être que ces modules sont correctement importés et transmis par référence, peut-être pas. Peut-être qu'une meilleure explication ou plus de code aiderait. –

Questions connexes