我刚刚完成了我的第一个 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 库和其他一切都会很好地到位。
谢谢!