如何使用 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.use
d 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 对两个或多个数据库进行建模?的主要内容,如果未能解决你的问题,请参考以下文章