`express.static()`保持路由我的文件

在处理快速项目时,我正在尝试使用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我得到一个404显示Error: ENOENT, stat 'C:\html\index.html'

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

这是我的公用文件夹的树

上市
 ├───css
 ├───hmtl
 |  └───index.html
 ├───img
 └───js

我路由这个错误? 我该如何解决?

你必须颠倒你的路由器的顺序

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

意味着你的路由器将被首先调用,如果没有中间件处理请求,那么express会调用静态文件,所以如果你先放置静态中间件,express将首先处理静态文件。

也build议先安装静态中间件。

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

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

Express会首先在public / html文件夹中尝试静态文件,然后在剩下的(包括public / html)上,我更喜欢将html文件放在公共文件夹的根目录下,或者放在不同的文件夹(例如public-html,static-html )