node.js - Node Express 中的静态路由

标签 node.js express routes

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

路由的设置是为了让 '/list/*''/setup/*' 获取不同的 html 文件,其中目录用作存储 ID,例如更新页面 url/setup/12345 上的信息会将信息存储在 12345 中。

为了能够加载脚本等,还需要使用正则表达式匹配 /assets/ 的路由,以允许访问 url/setup/assets/script.js,而无需路由到具有新存储 ID 的 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 });
});

最佳答案

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

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

关于node.js - Node Express 中的静态路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36395563/

相关文章:

javascript - Node.js Express 处理错误函数

node.js - Angular 2 RC 使用 Express 服务器而不是 Lite 服务器

javascript - NodeJS错误: Cannot GET/from running the url on the web browser

node.js - Jade 模板 if 语句

node.js - 在 NodeJS 中修改 HTML 文件

javascript - 以 JSON 格式非阻塞写入 Mongo 响应

node.js - 如何修复 'Error: Cannot find module ' super 测试''

php - 如何获取 Laravel 5.1 中间件中的路由

firebase-realtime-database - API 路由在 NextJS 应用程序中不起作用 (Firebase)

ruby-on-rails - Rails 3 路由并使用 GET 创建干净的 URL?