node.js - 使用 Express.js 服务静态文件和 app.get 冲突

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

});

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/

相关文章:

node.js - 适用于大于 128 字节的 node.js 播放负载的 MQTT 客户端

javascript - Node.js API 与 express 和 mysql - 获取记录计数、页码……并提供分页

javascript - 在 Express 中使用自定义错误中间件时未定义 next

javascript - 我怎样才能让 gulp 对某些任务(单元测试、 vert 等)保持沉默?

javascript - Node.js 中的 null 转义

node.js - 如何在 NodeJS 中的代理后面使用 DocumentDB

node.js - 使用 Node.js 和 MongoDB 的警报系统

node.js - express 静态服务index.html 如何拒绝呢?

javascript - 运行服务器时出现找不到模块 '../lib/cli' 错误

javascript - Express + node.js API 过滤