为什么函数声明在app.use中不起作用?

时间:2019-06-17 20:02:42

标签: node.js express

当我在foo中使用app.use函数声明作为中间件时,编译器似乎无法识别req, res, next变量:

var express = require('express');
var path  = require('path');
var app = express();

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

app.use('/', foo(req, res, next)); //ReferenceError: req is not defined

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

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

通过比较,如果我在app.use中使用函数声明,则代码将按预期工作:

var express = require('express');
var path  = require('path');
var app = express();

app.use('/', function(req, res, next){
  console.log(req.path);
}); //ReferenceError: req is not defined

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

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

我的理解还不足以了解为什么这是一个错误

1 个答案:

答案 0 :(得分:0)

在您的示例中,app.use('/', foo(req, res, next));正在调用该函数并在通过JS文件进行解析时执行它。

另一个“比较”是函数声明,该声明在解析文件时不会被调用。

您可以将代码更改为:app.use('/', foo);,它将正常运行。