2016-09-07 2 views
0

Ich habe Webinhalte erzeugt durch Minecraft Overviewer in:Mischen Wildcards und Parameter in Express

/home/mc/backups/servername/latest/overviewer

Ich habe einen sehr einfachen Server mit Express/NodeJS. Hier ist meine app.js:

var express = require('express'); 
var app = express(); 

//----------------------------------------------------------------------------+ 
// Each server's root points to the latest overviewer page     | 
//----------------------------------------------------------------------------+ 
app.get('/minecraft/:server/*', function(req, res) { 
    console.log('HELLO?'); 
    res.send('Finally some luck!'); 

    /* 
    var 
     server = req.params.server, 
     file = req.params[0] ? req.params[0] : 'index.html', 
     dir = '../backups/' + server + '/latest/overviewer'; 

    res.sendFile(file, { root: dir }); 
    */ 
}); 

app.use(express.static('www')); 

app.listen(80, function() { 
    console.log('Web server listening on port 80'); 
}); 

ich ein wenig mehr Code enthalten als das, was läuft, so können Sie meine Absicht, für den Fall, sehen dies eine xy Art von Problem ist. Ich möchte statische Dateien routen, aber ich glaube nicht, dass ich express.static verwenden kann, weil ich möchte, dass die URL etwas anders als meine Dateistruktur (und basierend auf einem Servernamen) zugeordnet wird.

Also, was ist das Problem mit meinem einfachen Server? Wenn ich versuche, zu mysite.com/minecraft/isopre zu navigieren, sehe ich eine weiße Seite, die Cannot GET /minecraft/isopre sagt. Wenn ich die * vom Ende der Schnur entferne, die ich in der Leitung 7 bin, sehe ich Finally some luck!. Aber ich möchte den Stern dort, so kann ich mysite.com/minecraft/isopre zu index.html oder mysite.com/minecraft/isopre/overviewer.js zuordnen.

Also, was ist der richtige Weg, um dies zu tun?

Antwort

1

Um den gewünschten Betrieb durchzuführen, empfehle ich Ihnen, zu verwenden? Symbol für reguläre Ausdrücke:

app.get('/minecraft/:server/:file?', function(req, res, next) { 
    if('undefined' != typeof req.params.file && req.params.file) { 
     var file = req.params.file; 
    } 

    if('undefined' != typeof req.params.server && req.params.server) { 
     var server = req.params.server; 
    } 

}); 

In diesem Fall: Datei optional werden und node.js nicht Ihre gesamte Anwendung fehlschlagen, wenn Platzhalter fehlt.

Wenn die Variable req.params.file nicht definiert ist, können Sie die Datei index.html bereitstellen.

+0

Funktioniert wie ein Charme. Danke :) Ich dachte, es war einfach – Assimilater