0

我创建了以下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服务,如下所示:

查询.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 iemoleculer-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 为什么?

蒂亚

4

1 回答 1

0

您应该使用 require 加载db_postgres并用作 mixin,而不是依赖项。

于 2018-09-19T19:27:08.730 回答