1

こんにちはみんな私はアプリケーションのレイアウトに小さな問題があります。コントローラーをこのように設定しています。

ApplicationController = function(_app) {
    this.app = _app;
    console.log(this.app); //this works
};

ApplicationController.prototype.index = function(req, res, next) {
    console.log(this.app); //this is undefined
    res.json("hello");
};

module.exports = function(app) {
    return new ApplicationController(app);
};

そして私のルートファイルで私はこれをやっています。

module.exports = function(app) {

    //require controllers
    var Application = require('./controllers/ApplicationController')(app);       


    //define routes
    app.get('/', Application.index);
    app.get('/blah', Application.blah);

    return app;
};

渡したアプリ変数が他のインスタンスメソッドに表示されません。私が行方不明になっている理由はありますか?助けてくれてありがとう。

以前は、コントローラーをこのように設定していました。

module.exports = function(app) {

    var controller = {

            //app is defined
            res.render('index', {
                title: "Index"
            });
        }
    };

    return controller;
};

しかし、私はこの他のパタ​​ーンがもっと好きで、なぜそれが機能しないのかということよりも興味があります。

4

1 に答える 1

2

これらの行を変更してみてください。

app.get('/', Application.index);
app.get('/blah', Application.blah);

に:

app.get('/', Application.index.bind(Application));
app.get('/blah', Application.blah.bind(Application));

Applicationそれ以外の場合、ルートはインスタンスのコンテキストで呼び出されていません。

于 2012-05-30T14:52:00.900 に答える