【发布时间】:2015-03-24 11:17:25
【问题描述】:
在处理快速项目时,我尝试使用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。
这是我的公用文件夹的树
民众 ├───css ├───hmtl | └────index.html ├───img └────js我是不是路由错了?我该如何解决?
【问题讨论】:
-
app.use将为所有匹配路径参数的请求按照提供的顺序调用中间件。我建议在路由之前进行配置和静态分析。这应该可以解决问题。 -
我试过切换路由器和静态线路,但没有成功,有没有机会从
express.Router对象创建静态路由? -
您可能有两个问题。
res.sendFile('/html/index.html');没有意义,因为那是绝对路径,你可能是指res.sendFile(__dirname + '../public/html/index.html');。至于http://localhost:300/html/index.html,您的文件树示例有hmtl,这实际上是您机器上的拼写错误,还是只是示例? -
您也可以尝试为
app.use('/public', express.static(__dirnam + '/public'))之类的静态变量提供路径,如果是这样,可能会清除任何路由冲突 -
我已经修复了
hmtl的错字,并尝试了其他路径,但现在没有找到Error: ENOENT, stat 'C:\Users\James\Desktop\template\include..\public\html\index.html'我还添加了静态路径。这些都不起作用:(
标签: node.js express static-files