4

I'm trying to use node-orm2 as middleware with Express the documentation only shows how you can connect to one database only.

I have tried getting Express to use two different middleware layers, but no luck. For instance,

app.use(orm.express('sqlite://test.db', define: { /* define table1 */ }));
app.use(orm.express('sqlite://test2.db', define: { /* define table2 */ }));

I've routed everything correctly to this get handler:

app.get("/", function (req, res) {
   var t1 = req.db.models.table1.find(...);
   var t2 = req.db.models.table2.find(...);
   res.send([t1,t2]);
});

Since I app.used table1's database first, the second of the find invocations will yield

TypeError: Cannot call method 'find' of undefined

... which means that the two define: blocks haven't been merged, which is what we'd like.

How would I access two databases with node-orm2?

4

1 に答える 1

1

あなたのコードは問題ないようです。問題は、「req.models」ではなく「req.db.models」を使用していることだと思います。ドキュメントから:

app.get("/", function (req, res) {
    // req.models is a reference to models used above in define()
    req.models.person.find(...);
});

また:

orm.express を複数回呼び出して、複数のデータベース接続を持つことができます。接続全体で定義されたモデルは、req.modelsで結合されます。app.use(app.router) の前、できればアセットのパブリック フォルダーの直後に使用することを忘れないでください。

すべてが「モデル」の下にまとめられるだけで、データベース間の差別化要因はありません。これは、モデルに複数の DB で同じ名前を付けることはできないことを意味しますが、それは仕方のないことです。

于 2014-07-19T02:12:21.903 に答える