我需要sails.js动态创建新的数据存储区适配器和连接URL,并且遇到了此解决方案https://sailsjs.com/documentation/reference/waterline-orm/datastores/driver,其中指出我可以使用无状态驱动程序来完成此工作。
但是以某种方式我最终遇到了这个错误
TypeError: Cannot read property 'createManager' of undefined
这是我的示例代码:
let Driver = sails.getDatastore().driver;
let connectionUrl = `postgresql://postgres:postgres@localhost/test-db`;
let manager = (
await Driver.createManager({ connectionString: connectionUrl })
).manager;
顺便说一下,我的帆版本是1.2.1
答案 0 :(得分:1)
不保证所有数据库适配器都存在此属性。如果 数据存储区的基础适配器不支持标准化 驱动程序界面,则驱动程序将不存在
正如文档中明确指出的那样,数据源的基础适配器不支持标准化的驱动程序接口,因此driver
尚未定义,这就是您要获得的原因
TypeError: Cannot read property 'createManager' of undefined
答案 1 :(得分:0)
谢谢,我能够使用npm软件包-machinepack-postgresql来做到这一点:
https://github.com/node-machine/driver-interface
let dynamicDb = require('machinepack-postgresql');
let connectionUrl = `postgresql://postgres:postgres@localhost/test-db`;
let manager = (
await dynamicDb.createManager({ connectionString: connectionUrl })
).manager;
let db;
try {
db = (
await dynamicDb.getConnection({ manager: manager })
).connection;
} catch (err) {
await dynamicDb.destroyManager({ manager: manager });
return err;
}
let [err, data] = await flatry(dynamicDb.sendNativeQuery({
connection: db,
nativeQuery: 'select * from table1'
}));
if (err) {
return err;
}
await dynamicDb.destroyManager({ manager: manager });