当用作中间件时,这个属性是未定义的

时间:2017-07-13 14:33:45

标签: javascript node.js

我有一个容器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使用不当的问题,但是我看不出我搞砸了这个问题?

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

当你从对象"NNN"获得一个函数时,它会丢失它的上下文,app.use(box.test)不会引用this本身。您需要使用object函数创建带有附加上下文的函数,或者只需使用bind()并在其中调用对象上的函数。

arrow function

使用app.use(() => box.test());

bind