2012-04-11 4 views
4

node-ormをテストしていますが、モデルをエクスポートする正しい方法が見つかりません。ここではモデル定義(./models/user.js)は次のとおりです。node-ormを使用してモデルをエクスポートする方法は?

var orm = require('orm'); 

var db = orm.connect('pg://[email protected]/accounts', function(success, db) { 
    if (!success) { 
    console.log('Could not connect to database.'); 
    return; 
    } 

    var User = db.define('user', { 
    ... // Model schema 
    }); 

    module.exports = User; 
}); 

そして、私は別の場所(例えば./app.jsを)それを使用しよう:

var User = require('./models/user'); 
... 

app.get('/test', function(req, res) { 
    var user = new User({ 
    ... 
    }); 
    user.save(function(err, user) { 
    ... 
    }); 

    ... 
}); 

は、そのユーザーが判明しますノードがモデルコンストラクタを呼び出せないように空のオブジェクトです。 node-ormを使用してモデルをエクスポートする適切な方法は何ですか?それはおそらく単純ですが、私はドキュメント内の何かを見つける...

答えて

4

あなたの問題は、あなたのmodule.exportsをコールバック機能に設定しているということです。ノードのmodule loading systemは、あなたがそれを行うことはできないと具体的に述べています。

orm-nodeモジュールは、モデルに指定した名前を使用して、モデルをモジュールエクスポートに格納します。あなたはapp.jsを変更した場合、あなたの例では、読み取りに動作するはずです:

require('./models/user'); 
var orm = require('orm'); 
... 

app.get('/test', function(req, res) { 
    var user = new orm.user({ 
    ... 
    }); 
    user.save(function(err, user) { 
    ... 
    }); 

    ... 
}); 

はまた、あなたのモデルがコールバックで初期化されているので、それはあなたの後require()モデルモジュールすぐに利用できないことに注意してください。おそらく、あなたは/userのgetを処理する必要がある前に、データベース接続とモデルの初期化を完了しているでしょう。

これをすべて処理する最も安全な方法は、アプリケーションの初期化とlisten()がそのorm.connect()コールバックの一部として行われることを確認することです。

+0

ありがとう、それは今より良く機能します。コールバックの問題は、別のファイルでモデルを分離したいということです。私はおそらく私のモデルの定義を別のファイルに入れ、コールバックでそれらをインポートすることができます... – djevg

0

それは私がlight-ormでそれを行う方法です。

var ORM = require('light-orm'); 

var AdsCollection = new ORM.Collection({ 
    connector: ORM.driver, 
    tableName: 'ads' 
}); 

module.exports = AdsCollection; 

はあなたのORMとかなり類似していなければなりません。私はnode-ormからlight-ormに魔法の問題と複雑さのために移行しました。あなたはライトオルも見ることができます: https://npmjs.org/package/light-orm

関連する問題