0

初めての Node アプリケーションの作成が完了しました。うまく機能していますが、コミュニティからさらに多くの情報を読んで詳細を吸収するにつれて、私のアプリは私が読んでいる例とは少し異なるという結論に達しました.

それで、私は解決策を見つけ、howtonode.org をたくさん読んで深く掘り下げました。私は、制御フロー、プロミス、および Q ライブラリの概念に出くわしました。私はそれをすべて消化し始めています、私はそれを理解していると思いますが、私は自分の研究と発見を確認したかったのです. Qlibrary を使用してすべてを再構築することを決定する前に、少なくともコア アプリと方法論を完全に理解できているかどうか疑問に思っています。基本的に、この時点でどのように前進するかを委任します。

app.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);

controller.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
    ));
}

すべてのライブラリと重要なコンポーネントをアプリ変数にカプセル化してコントローラーに渡すというアプローチをとったので、参照を直接呼び出して、各コールバック間で 1 つの変数のみを渡すことができます。

その後のすべてのリクエストで、app.js の pre にアタッチしたリクエスト値から app 変数にアクセスしています (したがって、ルート コールバック関数内の request.app.model() 関数です。

このようにコードを構造化することについて心配する必要があるかどうか疑問に思っています。これにより、グローバル変数やそのようなものについて心配することなく、参照をやり取りすることが非常に簡単になりました。名前空間とグローバル変数宣言全体の問題を回避するのに本当に役立つため、これはスマートな方向性であると誰かがほのめかした、少し似たものを読みました(これは大きな問題です)。

もし私が正しい方向に進めば、Q ライブラリと他のすべてがかなりうまく収まると思います。

ありがとう!

4

0 に答える 0