`express.static()`继续路由我的文件

时间:2015-01-26 00:57:57

标签: node.js express static-files

在处理快速项目时,我正在尝试使用express.Router对象来处理我的应用程序路由。在我的主应用程序文件中,我为所有静态文件(css,javascript,html)添加了静态路由。

app.js

var express = require('express');
var io = require('socket.io')(app);
var bodyParser = require('body-parser');
var router = require('./include/router');

var app = express();
app.use('/', router);
app.use(express.static(__dirname + '/public'));
app.use(bodyParser.json());

io.on('connection', function(socket) {

});

app.listen(3000);

router.js

var express = require('express');
var path = require('path');

var router = express.Router();

router.get('/', function(req, res) {
  res.sendFile('/html/index.html');
});

module.exports = router;

当我尝试访问localhost:3000时,我收到了显示Error: ENOENT, stat 'C:\html\index.html'

的404

此外,当我尝试直接访问静态路由时(我相信http://localhost:300/html/index.html),但这会给我Cannot GET /html/index.html

这是我公用文件夹的树

public
├───css
├───hmtl
|   └───index.html
├───img
└───js

我的路由错了吗?我该如何解决?

1 个答案:

答案 0 :(得分:10)

您必须颠倒路由器的顺序

app.use('/', router);
app.use(express.static(__dirname + '/public'));

意味着您的路由器将首先被调用,如果没有中间件处理请求,则express将调用静态文件,因此,如果您先将静态中间件放入,则express将首先处理静态文件。

还建议先放置静态中间件。

对于你的问题,你应该试试这个:

app.use(express.static(__dirname + '/public/html'));
app.use(express.static(__dirname + '/public'));
app.use('/', router);

Express将首先在public / html文件夹上尝试静态文件,然后在其余部分(包括public / html)上,我更喜欢将html文件放在公用文件夹的根目录上,或者放在不同的文件夹上(例如public-html,静态HTML)