在处理快速项目时,我正在尝试使用express.Router
对象来处理我的应用程序路由。在我的主应用程序文件中,我为所有静态文件(css,javascript,html)添加了静态路由。
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);
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'
此外,当我尝试直接访问静态路由时(我相信http://localhost:300/html/index.html
),但这会给我Cannot GET /html/index.html
。
这是我公用文件夹的树
public ├───css ├───hmtl | └───index.html ├───img └───js
我的路由错了吗?我该如何解决?
答案 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)