`express.static()` 不断从路由中路由我的文件

`express.static()` keeps routing my files from the route

在处理 express 项目时,我正在尝试使用 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 文件夹的树

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

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

您必须颠倒路由器的顺序

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 文件放在 [=27= 的根目录中] 文件夹或可能在不同的文件夹中(例如 public-html、static-html)