我正在尝试将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访问两个数据库?
答案 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。