如何使用node-orm2使用Express为两个或更多数据库建模?

时间:2013-03-14 15:20:54

标签: database node.js orm

我正在尝试将node-orm2用作Express的中间件,文档仅显示如何仅连接到一个数据库。

我试过让Express使用两个不同的中间件层,但没有运气。例如,

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

我已将所有内容正确路由到此get处理程序:

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

首先我app.use d table1的数据库,find调用中的第二个将产生

TypeError: Cannot call method 'find' of undefined

...这意味着两个define:块尚未合并,这就是我们想要的。

如何使用node-orm2访问两个数据库?

1 个答案:

答案 0 :(得分:1)

您的代码似乎很好。我认为问题是你正在使用" req.db.models"而不只是" req.models"。来自documentation

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)之前使用它,最好是在你的资产公共文件夹之后。

在"模型下,所有东西都被混合在一起,"数据库之间没有区别。这意味着你不能在多个数据库中为你的模型命名相同的东西,但是c' est la guerre。