节点中的静态路由表达

时间:2016-04-04 06:07:04

标签: node.js express routing

我在Node Express中使用了一组静态路由,并且遇到了一种非常奇怪的现象。

设置路由,以便'/list/*''/setup/*'访问不同的html文件,其中目录被用作存储ID,例如更新页面url/setup/12345上的信息会在12345中存储信息。

为了能够加载脚本等,还有匹配/assets/正则表达式的路由,以便在不使用新存储ID路由到url/setup/assets/script.js的情况下访问setup.html

我的问题是这适用于url/setup/assets/script.js但不适用于url/list/assets/script.js,即使它们具有相同的路线。

编辑:

导航至url/list/assets/script.js会导致list.html(不受欢迎的行为)

导航至url/setup/assets/script.js会导致script.js(想要的行为)

关于'/ list / *''为什么不起作用的任何想法?

以下是我的静态路线:

app.use(/assets/, express.static(wwwPath));

app.use('/list/*', function(req, res, next) {
    res.sendFile('list.html', { root: wwwPath });
});

app.use('/setup/*', function(req, res, next) {
    res.sendFile('setup.html', { root: wwwPath });
});

1 个答案:

答案 0 :(得分:0)

解决方案是使用自定义中间件。以下是新路线:

var requestParser = function(req, res, next) {
    if(req.originalUrl.indexOf('/assets/') >= 0) {
        var assetPath = path.join(wwwPath,  req.path.slice(req.url.indexOf('/assets/')));
        fs.stat(assetPath, function(error, stat){
            if(stat && stat.isFile()) {
                res.sendFile(assetPath);
            }
            else{ 
                res.status(404).send('<h1>404</h1>');
            }
        });
    }
    else {
        next();
    }
};

app.use(requestParser);

app.use('/list/*', function(req, res, next) {
    res.sendFile('schema.html', { root: wwwPath });
});

app.use('/setup/*', function(req, res, next) {
    res.sendFile('setup.html', { root: wwwPath });
});