我创建了以下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
为什么?
蒂亚