`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 )