`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)
在处理 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'
此外,当我尝试直接访问静态路由时(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)