Nodejs、ルートをes6クラスとして表現する 質問する

Nodejs、ルートをes6クラスとして表現する 質問する

プロジェクトを少し整理したいので、ルートにes6クラスを使用しようとしています。問題はこれ常に未定義です。

var express = require('express');
var app = express();

class Routes {
    constructor(){
        this.foo = 10
    }

    Root(req, res, next){
        res.json({foo: this.foo}); // TypeError: Cannot read property 'foo' of undefined
    }
}

var routes = new Routes();
app.get('/', routes.Root);
app.listen(8080);

ベストアンサー1

コードを使用してピン留めしてみてくださいthis:

app.get('/', routes.Root.bind(routes));

アンダースコアを使用して定型文から抜け出すことができますバインドオール関数。例:

var _ = require('underscore');

// ..

var routes = new Routes();
_.bindAll(routes, 'Root')
app.get('/', routes.Root);

また、es7 を使用すると、よりエレガントな方法でコードを記述できることもわかりました。

class Routes {
    constructor(){
        this.foo = 10
    }

    Root = (req, res, next) => {
        res.json({foo: this.foo});
    }
}

var routes = new Routes();
app.get('/', routes.Root);

おすすめ記事