如何使用 node-orm2 通过 Express 对两个或多个数据库进行建模?

Posted

技术标签:

【中文标题】如何使用 node-orm2 通过 Express 对两个或多个数据库进行建模?【英文标题】:How can I use node-orm2 to model two or more databases with Express? 【发布时间】:2013-03-14 15:20:53 【问题描述】:

我正在尝试将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.used table1 的数据库,所以第二个find 调用将产生

TypeError: Cannot call method 'find' of undefined

...这意味着两个define: 块还没有被合并,这是我们想要的。

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

【问题讨论】:

【参考方案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。

【讨论】:

以上是关于如何使用 node-orm2 通过 Express 对两个或多个数据库进行建模?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 node-orm 导出模型?

node-orm2 获取唯一出现次数?

如何在 node-orm 中检查列的 NULL 值

如何使用Visual Studio Express 2012升级nuget

如何使用 ajax 从 react 到 express?

如何使用 plotly express 创建线图,其中可以通过下拉菜单选择 pandas 数据框?