无法读取未定义的属性“ createManager”

时间:2019-07-05 04:48:10

标签: javascript sails.js

我需要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

2 个答案:

答案 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 });