2011-08-09 4 views
0

Je dois écrire une nouvelle application Web et actuellement je suis en train de décider de l'architecture, il y a plusieurs choses que je sais que je veux être en mesure de le faire:Frontend architecture pour une application web

  1. Tous Je veux une API ReST qui est séparée de l'interface utilisateur car j'ai déjà trois clients pour l'API: les applications mobiles, le site web et un serveur de une 3ème compagnie attendant que le produit soit construit
  2. elle doit pouvoir être à l'échelle horizontale (a mais d'une répétition de 1)
  3. Facile à entretenir: pas le temps d'apprendre de nouvelles langues, plus de candidats disponibles mais prêts à adopter de nouvelles technologies

est ici l'architecture de base que je suis venu avec:

frontend combinaison de nginx + nodejs + express.js + YUI, api: nginx + tomcat + pile cadre ressort (+ de repos + sécurité + noyau aop)

le frontend parlera à l'api avec oAuth 2.0

rien d'excitant A propos de l'api je l'ai déjà fait, je sais que cela fonctionne et fonctionne bien aurait aimé mettre un peu de saveur scala mais je n'ai pas le temps. Mon principal souci est le frontend: nodejs est incroyablement excitant et je joue depuis un certain temps aime aussi le fait qu'il est en JS, mais j'ai peur de la navigation + templating + sessions (pour l'authentification seulement: apatride , stateless, stateless) + logging + débogage de celui-ci, si cela fonctionne il fonctionne bien mais ce n'est pas un environnement mûr pour développer dans .....

quelqu'un ici a développé une interface complète avec pile ou des sous-ensembles de celui-ci? d'autres suggestions à choisir?

merci les gars.

Répondre

0

mais j'ai peur de la navigation + sessions + (templating pour authentification seulement: sans état, sans état, sans état) + exploitation forestière + débogage de celui-ci

navigation? Je ne suis pas sûr de te comprendre. Utilisez des hyperliens. Autant que je sache, il n'y a rien dans les noeuds comme les assistants de type Rails, mais ceux-ci n'ont jamais été aussi intéressants pour moi. Si vous voulez quelque chose comme le style Rails avant/après les filtres, par exemple pour demander un utilisateur connecté, connectez-vous bien.

app.all('/app/*', requireUser) 

qui appellera requireUser pour tout chemin commençant par /app. À l'intérieur requireUser vous pouvez vous assurer que req.session.user est là (et peut-être a l'autorisation appropriée). Si c'est le cas, vous appelez next() et le middleware responsable de la génération de la réponse est exécuté. Si l'utilisateur n'est pas connecté ou n'est pas autorisé, vous pouvez générer une réponse de redirection 30X et n'appeler pas next(). Terminé. Il y a un bon exemple exactement dans le express.js guide. Recherchez loadUser. Cette conception est vraiment élégante, à mon humble avis.

templation? Euh, node.js a aussi bien ou mieux des options de modèle que n'importe quelle autre plate-forme. Essayez jade ou l'un d'une douzaine d'autres. Vous pouvez utiliser les mêmes modèles sur le serveur et dans le navigateur, ce qui est une belle victoire. Découvrez this video of Dav Glass using YUI widgets on the server side in node.js depuis que vous aimez YUI.

sessions? Connect sessions. Goûtez bien. Moins de remplissage. Quel est le problème?

enregistrement? Winston travaille pour moi. Il y a aussi des bibliothèques plus raffinées, je pense.

débogage? node-inspector donne à node.js (IMHO) le meilleur support de débogage disponible. Il débogue avec l'inspecteur de chrome et est tout aussi génial que le débogage côté client javascript. Je peux également déboguer les tests unitaires côté serveur lors de l'exécution via jasbin.

Voici une réponse à what companies are using node.js in production.

+0

merci pour les liens!, Par navigation, je veux dire quelque chose comme jsf navigation xml, autant que je déteste JSF il est difficile de voir un plan de site entier à partir de liens encore plus de contrôle, comment faire pour implémenter l'authentification, protéger toutes les URL si l'utilisateur n'est pas authentifié, rediriger vers un login.jsp je peux penser à plusieurs façons mais y a-t-il un cadre pour cela? , le fait que le serveur puisse écraser en raison d'une exception non captée est également un souci ... avez-vous exécuté nodejs en production? – Amnon

+0

Édité ma réponse avec plus d'informations sur la navigation. Vous pouvez également utiliser 'app.error' pour intercepter les erreurs et empêcher le blocage du serveur. J'ai utilisé node.js dans "production" mais pour les nano-sites principalement utilisés par moi-même. –

0

Donc, si vous avez un problème avec le test, alors vous ne comprenez pas certaines fonctionnalités de Node.js et exprimez. Par exemple, vous pouvez utiliser quelque chose comme ça pour le test:

app.get('/route', function(req,res,next) { 
    require('./controllers.js').method(req,res,next) 
}); 

Ensuite, vous devez déposer le cache avec tous les fichiers nécessaires dans votre controlles.js:

if (require.cache[__filename]) 
{ 
    var del = false; 
    for (i in require.cache) 
    { 
    if (i == __filename) 
    { 
     del = true; 
    } 
    if (del) 
    { 
     delete require.cache[i]; 
    } 
    } 
} 

Alors maintenant, votre contrôleur mis à jour instantanément en cours version lorsque la requête passe.

Pour comprendre comment fonctionne-t nodejs nécessitent un travail juste essayer ceci:

require.js

module.exports = {}; 

principale.js

var x = require('./require.js'); 
x.tell = true; 
var y = require('./require.js'); 
y.tell = false; 

console.log(require('./require.js')); 
Questions connexes