对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。
我尝试使用res.send文件删除EJS文件中的前导斜杠,并将资产硬编码为完全绝对路径,但第一个和第二个选项不起作用,第三个选项是不理想。
答案 0 :(得分:3)
只是注意到我自己的项目代码包含以下内容而没有公开之前的初始斜杠:
app.use(express.static(path.join(__dirname, 'public')));
尝试放弃你的初始斜线并尝试它可能是值得的。