2016-09-07 64 views
0

我有web內容:由<a href="https://overviewer.org/" rel="nofollow">Minecraft Overviewer</a>產生的混合通配符和參數的快速

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

我有快遞/一的NodeJS非常簡單服務器。這裏是我的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'); 
}); 

我包括比正在運行,所以你可以看到我的意圖的情況下,這是一個XY樣的問題多一點的代碼。我想要路由靜態文件,但我不認爲我可以使用express.static,因爲我想將URL映射爲與我的文件結構(並基於服務器名稱)稍有不同。

那麼我的簡單服務器有什麼問題?當我嘗試導航到mysite.com/minecraft/isopre時,我看到一個白頁,表示Cannot GET /minecraft/isopre。如果我從第7行的字符串末尾刪除*,我會看到Finally some luck!。但我想要那裏的明星,所以我可以將mysite.com/minecraft/isopre映射到index.htmlmysite.com/minecraft/isopre/overviewer.js

那麼正確的做法是什麼?

回答

1

爲了執行理想的操作,我建議您使用?正則表達式符號:

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; 
    } 

}); 

在這種情況下:文件成爲可選的,如果通配符不存在的node.js不會失敗你的整個應用程序。

因此,如果req.params.file變量未定義,您可以提供index.html文件。

+0

工程就像一個魅力。謝謝:)我認爲這很簡單 – Assimilater

相關問題