NodeJS应用程序布局和变量传递

时间:2012-05-30 13:47:36

标签: javascript node.js

大家好我的应用程序布局有一个小问题。我正在设置我的控制器。

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

但我更喜欢这种其他模式,而且我更好奇为什么它不起作用。

1 个答案:

答案 0 :(得分:2)

尝试更改这些行:

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

为:

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

您的路线不会在Application实例的上下文中调用。