在express.js中加载静态文件

时间:2014-10-13 12:16:15

标签: javascript node.js express

我使用express来构建web应用程序。我有路由或静态文件的问题。 我添加了对静态文件的引用:

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

并设置路线:

app.use('/', routes);
app.use('/users', users);
app.use('/blog', blog);

在我的blog路由器中:

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res) {
  res.render('blog/index');
});
/* GET registration form. */
router.get('/registration', function(req, res) {
  res.render('blog/registration');
});

module.exports = router;

所以我的问题: 当我转到/blog我的静态文件加载正确(没有博客路径)。但是当我去/blog/registration时,我得到错误(路径中有博客):

GET /blog/stylesheets/css/bootstrap.min.css  registration:1
GET /blog/stylesheets/lib/og-component.css  registration:1
GET /blog/stylesheets/lib/venobox.css  registration:1
GET /blog/stylesheets/lib/zocial.css  registration:1
GET /blog/stylesheets/lib/font-awesome.css  registration:1
GET /blog/stylesheets/lib/animate.css  registration:1
GET /blog/stylesheets/css/style.css  registration:1
GET /blog/stylesheets/css/scheme/light-blue.css  registration:1
GET /blog/js/lib/modernizr.custom.js  registration:1
GET /blog/images/jssolutions-logo.png 404 (Not Found) 

如何解决此问题:在路径中加载没有blog的静态文件:

/stylesheets/css/bootstrap.min.css

2 个答案:

答案 0 :(得分:2)

如果您的样式表和其他静态内容存储在/ public文件夹中,并且您已包含该语句:

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

然后你的html应该是这样的:

<link href="/stylesheets/stylesheet.css" rel="stylesheet">

即使你在/ blog /内,也应该找到它们,否则你似乎正在使用相对路径。

答案 1 :(得分:2)

这与快递或static无关,而是与您从网页引用静态文件的方式有关。具体来说,如果您的网址看起来像

<link href="stylesheets/stylesheet.css" rel="stylesheet" />

然后假设这些相对到当前URL根目录。例如,如果当前网址为/blog,则根目录为/,因此脚本将从/stylesheets/stylesheet.css加载。因此,在您的方案中,如果网址为/blog/registration,则根目录为/blog/,因此脚本将从/blog/stylesheets/stylesheet.css加载。

如果希望从网站根目录加载所有静态文件,则在开头放置正斜杠

<link href="/stylesheets/stylesheet.css" rel="stylesheet" />