当我在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!');
});
我的理解还不足以了解为什么这是一个错误
答案 0 :(得分:0)
在您的示例中,app.use('/', foo(req, res, next));
正在调用该函数并在通过JS文件进行解析时执行它。
另一个“比较”是函数声明,该声明在解析文件时不会被调用。
您可以将代码更改为:app.use('/', foo);
,它将正常运行。