0

我刚刚完成了我的第一个 Node 应用程序的编写。它运行良好,但是当我从社区阅读更多内容并吸收详细信息时,我得出的结论是,我的应用程序与我正在阅读的示例有点不同。

所以我更深入地寻找解决方案并阅读了很多 howtonode.org。我偶然发现了控制流、承诺和 Q 库的概念。我开始消化这一切,我想我明白了,但我想确认我的研究和发现。在我决定使用 Qlibrary 重组所有内容之前,我想知道我是否至少已经掌握了我的核心应用程序和方法,它基本上将代表我在这一点上如何前进。

应用程序.js

// Require global libraries
var app = {
    config     : require('../../config.json'), // my custom config files
    restify    : require('restify'),
    path       : require('path'),
    mongo      : require('mongodb'),
    model      : require('./models.js'),
    q          : require('q'),
    api        : require('./api_util.js'),
    underscore : require('underscore')
};
app.server.pre(function (request, response, next) {
    request.app = app;
    return next();
});
app.server = app.restify.createServer(app.config.api);
require('controller.js')(app);
app.server.listen(app.config.api.port);

控制器.js

module.exports = function Controller(app, parcel, controller_name) {
    app.server.get({
        path : '/my/controller/',
        version  : '1.0.0',
        name     : 'My REST GET Controller'
    }, function(request, response, next){
        var model = new request.app.model();
        // do some other stuff
    ));
}

我采取了将我所有的库和重要组件封装在应用程序变量中的方法,并将其传递到我的控制器中,这样我就可以直接调用引用,并且在每个回调之间只传递一个变量。

对于之后的每个请求,我都从我附加到 app.js 中 pre 的请求值访问 app 变量(因此路由回调函数中的 request.app.model() 函数。

我想知道我是否应该关注以这种方式构建我的代码。它使来回传递引用变得非常容易,而不必担心全局变量或任何类似的东西。我读到了一些类似的东西,有人暗示这是一个聪明的方向,因为它确实有助于命名空间和解决整个全局变量声明问题(这是一个很大的禁忌)。

如果我被推向正确的方向,我认为 Q 库和其他一切都会很好地到位。

谢谢!

4

0 回答 0