node . js,Express:没有找到动态路由上的静态资源

Node.js & Express: Static assets on dynamic routes aren't found

本文关键字:路由 动态 资源 静态 js Express node      更新时间:2023-09-26

我对Node.js如何提供静态资产感到困惑。我使用的是最新的Express、EJS和Node。我在我的应用程序中有以下路由(为了简洁起见,删除了一些代码,还有其他没有参数的路由)。我已经搜索了S.O.类似的问题,但感觉我的问题可能不同,因为有两个参数。

app.set('view engine', 'ejs');
app.use(express.static(__dirname + '/public'));
    ...
    app.get('/:userid?/:catid?', function(req, res){
    ... some db queries here ...
        res.render('pages/listing',{
            siteConfig: nconf.get("siteConfig"),
            pageTitle: pageTitle,
            results:dbResults
       });
    }

在我的EJS视图模板中,我有如下的资产路径:

<img src="/images/static_logo.png" />
<script src="/bower_components/modernizr/modernizr.js"></script>
<link rel="stylesheet" href="/css/app.min.css" />

问题发生时,我传递两个id的路由,让我们说localhost/763/201,我的静态资产出现不渲染。所有资源都以路径http://localhost/763/css/style.css开头(仅第一个ID)。理想情况下,我希望它指向http://localhost/css/style.css,而不管路由如何。

我已经尝试删除EJS文件中的前导斜杠,使用res.sendfile,并将资产硬编码为完全绝对路径,但第一和第二个选项不起作用,第三个选项不理想。

请注意,我自己的项目代码包含以下内容,但在public之前没有初始斜杠:

app.use(express.static(path.join(__dirname, 'public')));

你可以试着去掉开头的斜杠。