在Express中混合使用通配符和参数

在Express中混合使用通配符和参数,express,url-routing,Express,Url Routing,我拥有由以下内容生成的web内容: /home/mc/backups/servername/latest/overviewer 我有一个带有express/nodejs的非常简单的服务器。这是我的app.js: var express = require('express'); var app = express(); //----------------------------------------------------------------------------+ // Each

我拥有由以下内容生成的web内容:

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

我有一个带有express/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
时,我看到一个白色页面,上面写着
无法获取/minecraft/isopre
。如果我从我在第7行路由的字符串末尾删除
*
,我会看到
终于有好运了。但是我想要那颗星,这样我就可以把
mysite.com/minecraft/isopre
映射到
index.html
或者
mysite.com/minecraft/isopre/overviewer.js


那么正确的方法是什么呢?

为了执行理想的操作,我建议您使用符号作为正则表达式:

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文件。

为了执行理想的操作,我建议您对正则表达式使用符号:

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文件。

工作起来很有魅力。谢谢:)我觉得这很简单,就像一个符咒。谢谢:)我觉得很简单