使用Express.js提供静态文件和app.get冲突

lim*_*gni 7 node.js express

我这里有这段代码:

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');

});
Run Code Online (Sandbox Code Playgroud)

app.get()回调中的代码未被调用.如果我注释掉这一app.use(express.static(__dirname + '/public'))行,那么callaback就可以了.我试过改变订单,但它就像一个乐透!我想知道这里出了什么问题.

我确信这与我在如何调用中间件方面缺乏知识有关.有人能帮助我理解这个问题吗?

基本上我只想在提供文件之前执行一些逻辑,并在浏览器上加载index.html.顺便说一句,放在app.get()app.use(express.static())一行,没有做到这一点!

Dan*_*iel 5

你的静态文件中间件应该先行.

app.use(express.static(__dirname + '/public'));
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({secret: 'secret'}));
Run Code Online (Sandbox Code Playgroud)

你也应该为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);
Run Code Online (Sandbox Code Playgroud)

为每个请求处理中间件.因此,如果您index.html的静态文件中有一个,那么请求yourdomain.com/将永远不会进入,app.router因为它们将由静态文件处理程序提供服务.删除index.html然后该请求将流向您的app.router.