0

node-orm モデルをロードする関数があります。

function(server, connectionString){
    server.use(orm.express(connectionString,  {
        define: function (db, models, next) {
            loadIdeaDomain(db)
            next()          
        }   
    }))
    return this
}

node-orm モデルがロードされた後に実行する必要がある別のミドルウェア (パスポート) があります... しかし、aync の性質が私を夢中にさせています。上記をプロミスに変換するか、それが実行されるのを待ってから続行できますか?

loadIdeaDomain を promise に変換する更新

var loadIdeaDomain = function(db){
    var ideaDomainPath = './idea-domain/idea-domain.js'
    console.log('loading ' + ideaDomainPath)
    var qLoad = Q.nbind(db.load, db)
    return qLoad(ideaDomainPath).then(function(){
        console.log('THEN')
        definedModels = db.models

        _.each(_.keys(db.models), function(modelName) {
            makeQPromises(db.models[modelName], modelName)
        })
        return db.models
    }, function(e){
        console.log('ERR')
        console.log(e)

    })
}

エラーが発生することを除いて、これは機能するように見えます。

{ [エラー: モジュール 'C:\Users\todd\Documents\web\nodeTest\trq\node_modules\q/.idea-domain/idea-domain.js' が見つかりません] コード: 'MODULE_NOT_FOUND' }

したがって、これは node-orm ライブラリ モジュール Utilities.js と次の素晴らしい関数にまでさかのぼるように見えます。

exports.getRealPath = function (path_str, stack_index) {
    var path = require("path"); // for now, load here (only when needed)
    var cwd = process.cwd();
    var err = new Error();
    var tmp = err.stack.split(/\r?\n/)[typeof stack_index !== "undefined" ? stack_index : 3], m;

    if ((m = tmp.match(/^\s*at\s+(.+):\d+:\d+$/)) !== null) {
        cwd = path.dirname(m[1]);
    } else if ((m = tmp.match(/^\s*at\s+module\.exports\s+\((.+?)\)/)) !== null) {
        cwd = path.dirname(m[1]);
    } else if ((m = tmp.match(/^\s*at\s+.+\s+\((.+):\d+:\d+\)$/)) !== null) {
        cwd = path.dirname(m[1]);
    }

    if (path_str[0] !== path.sep) {
        path_str = cwd + "/" + path_str;
    }
    if (path_str.substr(-1) === path.sep) {
        path_str += "index";
    }

    return path_str;
};

これが問題の行です

path_str = cwd + "/" + path_str;
4

1 に答える 1