2016-09-07 44 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

相关问题