我这里有这段代码:
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()
回调中的代码未被调用。如果我注释掉 app.use(express.static(__dirname + '/public'))
行,那么回调就会起作用。我试过更改顺序,但这就像彩票一样!我更想知道这里出了什么问题。
我确信这与我对如何调用中间件缺乏了解有关。有人可以帮我理解这个问题吗?
基本上,我只想在提供文件并在浏览器上加载 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
,然后该请求将流向您的 app.router
。
关于node.js - 使用 Express.js 服务静态文件和 app.get 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16088824/