中间件似乎被服务器忽略了

时间:2019-06-16 20:02:26

标签: node.js express

在此示例中,我制作了一个中间件,该中间件应该在根目录上登录req.path。服务器似乎完全忽略了此功能:

var express = require('express');
var path  = require('path');
var app = express();
app.use('/', express.static("./public"));

app.use('/', function(req, res, next){ // the functions
    console.log("req.path = ", req.path); // no console entries on request
    next();
})

app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});

我还尝试将express.static()和函数作为app.use的参数放在一起,但仍然无效:

var express = require('express');
var path  = require('path');
var app = express();
app.use('/', 
express.static("./public"),
function(req, res, next){
    console.log("req.path = ", req.path);
    next();
});

function foo(req, res, next){
    console.log(req.path);
    next();
}

app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});

我不正确是什么?

编辑:如果我将中间件放在express.static之前,它将按预期工作。似乎是什么问题?

1 个答案:

答案 0 :(得分:1)

使用时

app.use('/', express.static("./public"));

正在发生两件事。

1) .use基本上用于向所有与路径匹配的请求中添加中间件。或者,如果未指定路径,它将用于所有路由。
仅供参考::所有中间件的请求均按其声明位置进行。例如:

app.use(mid1);
app.use(mid2);

表示请求将通过 mid1 mid2 和路径 handler

2)通过.usestatic/意味着每条路由/*都将通过express.static中间件并尝试在您的public文件夹中找到该文件。如果找不到,您将得到404,并且不会转到下一个中​​间件。如果找到,它将使用stream.pipe(res)

因此,在中间件之后使用express.static是指首先浏览我的中间件,然后在./public文件夹中搜索。

您所能做的就是提升中间件,并为静态中间件使用特定的路由。