2015-02-27 10 views
17

Ich habe einen Express-Server, und während des Aufbaus erstellt mehrere "Helfer" -Funktionen auf ihren eigenen Routen. Ich möchte diese Routen auf einen anderen Port zugreifen. Gibt es das eh in Express?NodeJS Express - separate Routen auf zwei Ports

Im folgenden Code wäre die Route "/ factory" (und andere Funktionen) auf einem Port und die Hilfsrouten von "/ killallthings", "/ listallthings" und "/ killserver" wären auf einem separater Port

Hier ist eine vereinfachte Version des Codes:

var express = require('express'); 
var things = []; 
var app = express(); 
var port = 8080; 

app.post('/factory/', function(req, res) { 
    //Create a thing and add it to the thing array 
}); 

//Assume more functions to do to things here.... 

app.post('/killallthings/', function(req, res) { 
    //Destroy all the things in the array 
}); 

app.post('/listallthings/', function(req, res) { 
    // Return a list of all the things 
}); 

app.post('/killserver/', function(req,res){ 
    //Kills the server after killing the things and doing clean up 
}); 

//Assume https options properly setup. 

var server = require('https').createServer(options, app); 

server.listen(port, function() { 
    logger.writeLog('Listening on port ' + port); 
}); 

Ist dies möglich mit Eil?

+5

Sie könnten zwei Apps erstellen –

+0

Mit "zwei Apps erstellen" meinst du so etwas wie: 'var app1 = express(); var app2 = express(); '? Ich gebe das einen kurzen Versuch ... – JKC

+1

Ja und dann müssten Sie sie auf separaten Ports hören –

Antwort

24

Basierend auf Explosion Pillen Vorschlag oben, modifizierte ich den Code in etwa so:

var express = require('express'); 
var things = []; 
var app = express(); 
var admin_app = express(); 
var port = 8080; 
var admin_port = 8081; 

app.post('/factory/', function(req, res) { 
    //Create a thing and add it to the thing array 
}); 

//Assume more functions to do to things here.... 

admin_app.post('/killallthings/', function(req, res) { 
    //Destroy all the things in the array 
}); 

admin_app.post('/listallthings/', function(req, res) { 
    // Return a list of all the things 
}); 

admin_app.post('/killserver/', function(req,res){ 
    //Kills the server after killing the things and doing clean up 
}); 

//Assume https options properly setup. 

var server = require('https').createServer(options, app); 

server.listen(port, function() { 
    logger.writeLog('Listening on port ' + port); 
}); 

var admin_server = require('https').createServer(options, admin_app); 

admin_server.listen(admin_port, function() { 
    logger.writeLog('Listening on admin port ' + admin_port); 
}); 

Ich wünschte, ich wüsste, wie Explosion Pillen den Kredit für die Antwort! :)

+0

Dies kann eine dumme Frage sein, aber irgendwelche Nachteile dieser Konfiguration? Ich frage, weil es so einfach scheint und ich kopiere das gerade jetzt. :) – user2348688

+0

eine späte Antwort :) Ich denke, der größte Nachteil ist die Sicherheit. Für unsere App war es ein internes, nur temporäres Test-Tool, und der Admin-Port diente lediglich dazu, nicht-technische Teammitglieder von einigen Funktionen fernzuhalten - keine echte Sicherheit. Im Allgemeinen möchte ich die Admin-Funktionalität nicht offen legen, da der Port der einzige Schutz ist. aber es war eine schöne Lösung für das, was wir brauchten. – JKC

0

Wenn Sie versuchen, mehrere Server zu erstellen, dann warum nicht mehrere bin/www-Dateien mit verschiedenen Ports und Konfigurationen. Eine andere Möglichkeit könnte sein, die Portnummer direkt von der Befehlszeile zu übergeben.