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;
};

我传递的 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 回答