使用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); });