打字稿表达中间件

时间:2014-12-19 13:27:14

标签: node.js express typescript

我有一个简单的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);

Relates to this

任何想法......

感谢

2 个答案:

答案 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));