我有一个简单的auth中间件用于表达。它检查标题,如果所有酷,则调用next()
现在我在" DoSomething" "这"等于全局,而不是"测试"和 " this.DoSomeThingPrivate"未定义。
我试过了
DoSomeThingPrivate :() => void;
this.DoSomeThingPrivate = () => {
...
}
图案。但也行不通。
import express = require('express');
var app = express();
class Test {
constructor() {
}
DoSomething(req:express.Request, res:express.Response, next:Function) :void {
this.DoSomeThingPrivate();
}
private DoSomeThingPrivate() :void
{
}
}
var test = new Test();
app.use(test.DoSomething);
任何想法......
感谢
答案 0 :(得分:8)
以下情况应该可以正常工作,例如DoSomething
使用胖箭头而不是DoSomethingPrivate
:
import express = require('express');
var app = express();
class Test {
constructor() {
}
// important:
DoSomething = (req:express.Request, res:express.Response, next:Function) => {
this.DoSomeThingPrivate();
}
private DoSomeThingPrivate() :void
{
}
}
var test = new Test();
app.use(test.DoSomething);
注意:您不需要使用bind
。另外https://www.youtube.com/watch?v=KDrWLMUY0R0&hd=1
答案 1 :(得分:6)
您已将参考仅传递给函数本身。该函数的实例将是全局的。您需要将函数绑定到test
的实例。
app.use(test.DoSomething.bind(test));