我有一个容器class
:
// container.js
function Container(clients) {
this.clients = clients;
}
Container.prototype.test = function (req, res, next) {
console.log(this.clients['key']);
next();
};
module.exports = Container;
然后从另一个文件创建一个快速服务器:
// server.js
const Express = require('express');
const BodyParser = require('body-parser');
const Container = require('./container');
var box = new Container({'key': 'secret' });
var app = new Express();
app.use(BodyParser.json());
app.use(box.test);
// some routes...
app.listen(3000);
当我发出请求时,我会将其记录到控制台:
TypeError: Cannot read property 'key' of undefined
我很困惑。我read up on many different things关于this
使用不当的问题,但是我看不出我搞砸了这个问题?
有什么想法吗?
答案 0 :(得分:2)
当你从对象"NNN"
获得一个函数时,它会丢失它的上下文,app.use(box.test)
不会引用this
本身。您需要使用object
函数创建带有附加上下文的函数,或者只需使用bind()
并在其中调用对象上的函数。
arrow function
使用app.use(() => box.test());
bind