0

Всем привет. Есть 2 node.js модуля:

console.time('test');

var respond;

var pgp = require('pg-promise')(/options/);

var cn = { host: 'localhost', // server name or IP address; port: 5432, database: 'trading_database_eur_usd', user: 'postgres', password: '7256' };

var db = pgp(cn); // database instance;

// select and return user name from id: db.any('SELECT * FROM eur_usd WHERE primary_key = 4623209;') .then(user => { respond = user; }) .catch(error => { console.log(error); // print the error; });

module.exports = { databaseRespond: respond };

console.timeEnd('test');

const http = require('http');
const port = 2000;
m = require("../database/database.js");

const requestHandler = (request, response) => { response.writeHead(200); console.log(request.method); console.log(request.headers); console.log(request.url); response.write('hi'); response.end(); };

const server = http.createServer(requestHandler);

server.listen(port, (err) => { if (err) { return console.log('something bad happened', err) }

console.log(m.databaseRespond);

});

Задача состоит в том. что бы перебросить значение параметра 'user' из первого модуля во второй;

Первое что мне пришло в голову это создать св-во 'databaseRespond' и положить в него вышеуказанный параметр через переменную 'respond' + затем передать все это дело через 'module.export'.

Но. Почему то после запуска второго файла - консоль выводит: { databaseRespond: undefined }

Вопросы:

1) Почему это происходит?
Ведь в первом файле можно через дебаггер наблюдать как результат лежит в необходимом св-ве:

введите сюда описание изображения


2) Какие есть альтернативные решения подобной задачи с импортом?

3) Как реализовать решение правильнее всего с точки зрения семантики и т.п.

  • 1
    m = require("../database/database.js"); const забыл или как? – Lev Shportak Nov 07 '18 at 03:06
  • 1
    Первый модуль нужно оформить в виде функции которая возвращает результат запроса в бд, и экспортировать эту функцию, а во втором модуле эту функцию нужно вызвать. – Lev Shportak Nov 07 '18 at 03:21
  • 1
    потому что у вас асинхронна операция, создайте функцию возвращающую промис и вызывайте ее соответствующее в другом модуле – arturovt Nov 07 '18 at 05:49
  • я так и подозревал что это с асинхронностью связано. А можите хотя бы в общих чертах написать как ваш пример выглядеть должен? – Mikhail Krivosheev Nov 07 '18 at 07:21

1 Answers1

0

Я бы так сделал. 1 файл

const func = function(db){
    return db.any('SELECT * FROM eur_usd WHERE primary_key = 4623209;');
}
module.exports = func;

2 файл добавляете

var pgp = require('pg-promise')(/*options*/);

var cn = {
    host: 'localhost', // server name or IP address;
    port: 5432,
    database: 'trading_database_eur_usd',
    user: 'postgres',
    password: '7256'
};

var db = pgp(cn);

и в конце

m(db).then(res=>console.log(res)).catch(err=>console.log(err));