Как получить из двух баз данных в одном запросе в koajs, используя pg.pool - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь получить комбинированный результат из двух таблиц разных баз данных. Я новичок в koajs и Node.js. Ниже мой пример кода, что я пытаюсь:

дб / index.js

const { Pool } = require('pg')

const pool = new Pool({
  host: 'localhost',
  port: '5432',
  user: 'postgres',
  password: 'postgres',
  database: 'sampl',
  max: 20,
  idleTimeoutMillis: 30000,
  connectionTimeoutMillis: 2000,
});

const pool1 = new Pool({
  host: 'localhost',
  port: '5432',
  user: 'postgres',
  password: 'postgres',
  database: 'secon',
  max: 20,
  idleTimeoutMillis: 30000,
  connectionTimeoutMillis: 2000,
});

Мой файл маршрута [/route.js] здесь я использую

import Router from 'koa-router'
const router = new Router()
var someVar = [];
var internas = [];
const db = require('../db')
router.get('/samson', ctx => {
  db.query('SELECT * FROM sam', null, (err, res) => {
    if (err) {
      console.log(err);
    }
    for (var i = 0; i < res.rowCount; i++) {
      var sno = res.rows[i].sno;
      var name = res.rows[i].name;
      var mobile = res.rows[i].mobile;
      var indx = i + 1;
      internas[i] = setValue(res.rows[i], i);
      console.log(internas);
      db.squery('SELECT * FROM dtl where sno=$1', [sno], (err, resu) => {
        if (err) {
          console.log(err);
        } else {
          var salary = resu.rows[0].salary;
          var address = resu.rows[0].address;
          console.log(someVar);
        }
      })
    }
  })
  ctx.body = internas;
})

function setValue(value, index) {
  var someVars = value;
  return someVars;
}
export default router

Я пытаюсь объединить две таблицы из двух баз данных для одного запроса

Table 1 contain: sno, name, mobile
Table 2 contain: sno, salary, address

Я ожидаю, что для каждой записи в таблице 1 мне нужно извлечь из таблицы 2 и вывод будет как

Record1: sno, name, mobile, salary, address
record2: sno, name, mobile, salary, address

Пожалуйста, предложите, я привык к синхронному программированию, и это асинхронно

1 Ответ

0 голосов
/ 14 сентября 2018

Вместо этого вы можете использовать pg-обещание, использовать async / await и сделать свою жизнь немного проще, а также задачи, чтобы сделать ее более производительной.

const { Pool } = require('pg-promise')

router.get('/samson', async ctx => {
  try{
    db.task('my-es7-task', async t => {
      let res = await t.any('SELECT * FROM sam', null);
      for (var i = 0; i < res.rowCount; i++) {
        try{
          var sno = res.rows[i].sno;
          var name = res.rows[i].name;
          var mobile = res.rows[i].mobile;
          var indx = i + 1;
          internas[i] = setValue(res.rows[i], i);
          console.log(internas);
          let results = await t.any('SELECT * FROM dtl where sno=$1', [sno])
          var salary = resu.rows[0].salary;
          var address = resu.rows[0].address;
          console.log(someVar);
        }catch(e){
          console.log(e);
        }
      }
      ctx.body = internas;
    }
  }catch(e){
    console.log(e);
  }
})
...