使用Express.js服务静态文件和app.get冲突
我在这里有这段代码:
var express = require('express') , http = require('http') var app = express(); var server = app.listen(1344); var io = require('socket.io').listen(server); app.use(express.static(__dirname + '/public')); app.use(express.bodyParser()); app.use(express.cookieParser()); app.use(express.session({secret: 'secret'})); app.get('/', function(req, res){ if(req.session){ console.log(req.session); } console.log('ok'); });
app.get()
callback中的代码没有被调用。 如果我注释掉app.use(express.static(__dirname + '/public'))
行,则callaback起作用。 我尝试改变顺序,但它像彩票! 我宁愿知道这里出了什么问题。
我敢肯定,这与我不熟悉中间件的知识有关。 有人能帮我理解这个问题吗?
基本上我只是想在执行文件之前执行一些逻辑,并在浏览器中加载index.html。 顺便把app.get()
放在app.use(express.static())
,也没有办法!
你的静态文件中间件应该先走。
app.use(express.static(__dirname + '/public')); app.use(express.bodyParser()); app.use(express.cookieParser()); app.use(express.session({secret: 'secret'}));
而且你也应该为app.router添加一个用途。
app.use(express.static(__dirname + '/public')); app.use(express.bodyParser()); app.use(express.cookieParser()); app.use(express.session({secret: 'secret'})); app.use(app.router);
为每个请求处理中间件。 因此,如果您的静态文件中包含index.html
,则yourdomain.com/
请求将永远不会传送到app.router
因为它们将由静态文件处理程序提供服务。 删除index.html
,然后该请求将stream向您的app.router
。
将您的index.html文件重命名为其他内容。 这很简单
app.use(express.static(__dirname + '/public')); app.get('/', function(req, res){ if(req.session){ console.log(req.session); } console.log('ok'); res.sendfile(new_index_file); });