PostgreSQL连接(通过pg-promise)服务问题

时间:2018-08-31 11:12:34

标签: moleculer

我创建了以下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的解决方案。
  • 我希望避免使用任何包装函数并进行维护 尽可能采用DRY方式。

问题: 最简单,最简单的方法是什么?

我的努力:

  • 我从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 servicesdb_postgres服务正在正常注册。 但是,queries服务永远不会。终端中的流量冻结,并且光标闪烁。 为什么?
  • 接下来,当我还在db_postgres中添加mixins时,出现以下错误 Failed to load service '.../services/queries.service.js' ReferenceError: db_postgres is not defined 为什么?

Tia

1 个答案:

答案 0 :(得分:0)

您应该向db_postgres加载require并用作混合,而不是依赖。