Utiliser Un Nœud.JS comme serveur REST et serveur web

j'écris une application avec Angular.JS et Node.js.

Il y a un Application côté client écrit en HTML & Angular.js qui a besoin d'un serveur web comme Apache pour être en ligne.

Il y a aussi un côté serveur RESTE webservice écrit en noeud.js, construit sur restify (mais je me fiche de l'API REST que j'utilise, je peux en utiliser une autre).

je peux tout faire marcher avec un noeud.js server pour le reste du service web, et un autre Nœud.js serveur pour servir le client-côté de la webapp. Mais j'aimerais avoir un seul noeud.js serveur exécutant, sur une URL/port (pour empêcher les requêtes AJAX de domaine croisé).

Comment puis-je le faire?

7
demandé sur Matthieu Napoli 2013-05-28 23:19:05

3 réponses

Je ne sais pas si cela s'applique à votre problème actuel - mais app.use() dans Express peut laisser une application principale définir des sous-applications pour traiter des préfixes de route différents. Ainsi vous pouvez avoir votre point d'application principal n'importe quelles requêtes commençant par /store/ pour un Express app, et toute demande d'

http://expressjs.com/api.html#app.use

6
répondu Plato 2013-05-28 22:18:34

Vous pouvez utiliser un proxy avant Nodejs. Nginx le plus rapide

exemple (nginx):

server {
    listen 80;
    server_name example.com

    # Only http://example.com/api/~
    location /api/ {
        proxy_pass  http://localhost:8000; # node.js app
        proxy_redirect     off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }

    location ~* \.(jpg|jpeg|gif|png|css|js|json|woff|zip|tgz|gz|swf|ico|txt|xml)$ {
        expires max;
        root /var/www/site_path;
    }
}
6
répondu Stanislav Lomadurov 2017-05-23 12:32:29

vous voulez servir à la fois l'application côté client et L'API à partir de la même URL...

(to prevent cross-domain AJAX requests).

Pourquoi? Cela ne se fait pas à l'échelle et va à l'encontre des implémentations d'API restful standard. En fin de compte, vous allez vouloir soutenir CORS parce que l'adpation universelle sera là dès l'année prochaine avec les nouveaux déploiements IE11 et IE12. JSONP peut être une solution de rechange jusqu'à ce qu'ils arive.

Il n'y a rien de mal avec cross-domain AJAX requests et sont récemment encouragé - - - d'où l'adoption à grande échelle de cette convention.

et si vous avez vraiment besoin de restreindre les requêtes D'API de domaines croisés, il suffit de whitelist les domaines que vous voulez accorder l'accès trop sous votre serveur de noeuds --- aussi facile que cela.

vous voulez servir à la fois l'application côté client et L'API à partir du même port...

  1. serveur de relais sur le noeud de passage api.domain.com par NGINX.

  2. Déplacer côté client application de la statique doc racine sous NGINX.

maintenant les deux sont assis sur le PORT 80, et un seul serveur de noeud est utilisé.

2
répondu Dan Kanze 2013-05-28 20:20:47