Проблема с подключением PostgreSQL (через pg-обещание)
Я создал следующее db_postgres
сервис, который работает отлично.
db_postgres.service.js
"use strict";
const Promise = require('bluebird');
const initOptions = {
promiseLib: Promise,
capSQL: true
};
const pgp = require('pg-promise')(initOptions);
const cn_postgres = {
host: 'localhost',
port: 5432,
database: 'db_name',
user: 'user_name',
password: 'user_password',
...
};
var db_postgres = null;
module.exports = {
name: "db_postgres",
version: "",
mixins: [],
hooks: {},
settings: {},
metadata: {},
dependencies: [],
actions: {
getUsers() {
db_postgres.any('SELECT * FROM user')
.then(data => {
return console.log(data);
})
.catch(error => {
return console.log(error);
});
},
},
methods: {},
events: {},
created() {},
async started() {
return db_postgres = await pgp(cn_postgres);
},
async stopped() {
if (db_postgres) {
return db_postgres.$pool.end();
}
}
}
Случай:
- У меня большое количество действий.
- Я хотел бы создать больше экземпляров этого сервиса, но, к сожалению, это невозможно, так как я получаю предупреждение / ошибку об установлении нового соединения, которое уже существует.
- Я не хочу использовать какое-либо решение на основе ORM.
- Я хочу избегать использования какой-либо функции-оболочки и поддерживать как можно более СУХОЙ способ.
Вопрос: Какой самый простой и легкий способ сделать это?
Мои усилия:
- Я удалил
getUsers()
действие отdb_postgres
оказание услуг. - Я создал новый
queries
обслуживание следующим образом:
queries.service.js
"use strict";
module.exports = {
name: "queries",
version: "",
mixins: [db_postgres],
hooks: {},
settings: {},
metadata: {},
dependencies: ["db_postgres"],
actions: {
getUsers() {
db_postgres.any('SELECT * FROM user')
.then(data => {
return console.log(data);
})
.catch(error => {
return console.log(error);
});
},
},
methods: {},
events: {},
created() {},
async started() {},
async stopped() {}
}
Проблемы:
- Когда я добавлю
"db_postgres"
вdependencies
и бегиnpm run dev
т.е.moleculer-runner --env --hot --repl services
,db_postgres
сервис регистрируется нормально. Но,queries
Сервис никогда не бывает. Поток в терминале останавливается, и курсор мигает. Зачем? - Далее, когда я также добавлю
db_postgres
вmixins
Я получаю следующую ошибкуFailed to load service '.../services/queries.service.js' ReferenceError: db_postgres is not defined
Зачем?
Тиа
1 ответ
Вы должны загрузить db_postgres
с require и использовать как mixin, а не как зависимость.