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;