这不是因为中间件。
当函数作为 JavaScript 中的参数传递时,它总是会丢失上下文。 Express 将中间件作为参数传递。所以这就是为什么。
有几种技术可以绑定上下文,你可以使用 apply、call、闭包或者更简单的 newES6 箭头函数 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions。
这是一个使用闭包的示例:
[edit]修复示例中的拼写错误,并添加功能代码示例。
中间js
module.exports = {
fn1: function(req, res, next) {
console.log('fn1');
next();
},
fn2: function(req, res, next) {
var self = this;
return function (req, res, next) {
console.log('fn2');
self.fn1(req, res, function () {
next();
});
}
}
};
sever.js (注意 fn2() )
var express = require('express');
var app = express();
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser('your secret here'));
app.use(require('./middle.js').fn2());
app.get('/', function(req, res) {
res.send('hey!');
});
app.listen('3000');
谷歌搜索“javascript函数绑定上下文”你可以找到好的文章并更好地理解这种行为。