Логическая ошибка при импорте данных в Node.js [дубликат]

161
02 апреля 2019, 20:20

На данный вопрос уже ответили:

  • Как вернуть значение из события или из функции обратного вызова? Или хотя бы дождаться их окончания 3 ответа

Всем привет. Есть 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) Как реализовать решение правильнее всего с точки зрения семантики и т.п.

Answer 1

Я бы так сделал. 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));
READ ALSO
Отслеживание значения input [закрыт]

Отслеживание значения input [закрыт]

Всем добрый день! при клике на кнопки из за отслеживания по клику число перепрыгивает дальше и сообщение выходит позжеПодскажите как лучше...

162
Как с помощью события popstate закрыть видео?

Как с помощью события popstate закрыть видео?

Как с помощью события popstate закрыть видео при нажати в браузере кнопку назад?

124
Не отображаются изображения в testflight

Не отображаются изображения в testflight

Загрузив свое ios приложение в testflight, столкнулся с проблемой, что в приложении отсутствуют все изображения: логотипы, добавленные мною иконки,...

156
Работа с коллекциями

Работа с коллекциями

дали задание, где нужно используя коллекции создать 2 библиотеки с определенным кол-вом книг и проводить операции над нимиТам каждая книга...

171