我正在使用express.js并构建一些基本功能,但是如果URL距离根目录超过一个目录,则无法从正确的位置提供express静态服务。请参考下面的例子。
我正在使用文档中常用的静态文件服务方法。
app.use(express.static(__dirname + '/public'));
我已经设置了几个路由,例如:
app.get('/signup', function(req, res) {
res.render('signup.ejs');
});
在链的末尾设置一个404捕获。
app.get('*', function(req, res){
res.status(404).render('404');
});
如果我访问在路由中定义好的页面,如
localhost:3000
或localhost:3000/login
,则一切正常。即使我访问了一个未定义的路由localhost:3000/foo
,也会正确地呈现404,并显示所有图片。然而,如果我进一步操作,例如
localhost:3000/login/foo
,则所有图片都会丢失,并且浏览器控制台会出现以下地址的错误:
http://localhost:3000/login/img/site-brand.png
同样的问题也会出现在包含多个目录的路由上。我理解Express官网上的文档是无论什么调用静态图像的方式,它都会从根目录下的public目录中提供服务,该目录包含js、img和css目录。
我的问题是,我哪里理解错了?如何让Express始终相对于根目录提供服务?