Битва за базу… данных

Злость — вот что я ощущаю. Бесит. На PHP эта задача заняла бы минут 15, но на js (да со всеми завязками) я просто не могу ничего сделать. Словно о стену бьюсь.

Вчерашний день, вечер и часть ночи оказались всраты. При том, не на полежать-почитать, а на совершенно бесполезное кодирование. Впрочем, чего ещё ожидать от js, который создавался вообще не для этого.

С наскока и прискока вопрос решить не получилось. Нужно думать, как быть дальше. Хелпер, умеющий работать с базой, мне нужен. Без него не обойтись никак.

Добыть готовый — на это потрачено слишком много времени.

Значит, писать свой. Но я не понимаю принципа работы node.js. Тут не получается просто создать js файл и работать с ним. Этого не достаточно.

Вот пример. Создаю файл, допустим, db.js

Кладу в него две строчки:

var str = 'Test';
console.log(str);

Ну примитив же. В любом браузере такое сработает. Но при запуске npx db.js ловлю ошибку. Почему, от чего, с хрена-ли??! Нет ответа.

Если обернуть в функцию, то ошибки не выдаёт. Но и результата тоже нет.

(function(){
    var str = 'Test';
    console.log(str);
});

Хм… Зато, если первый вариант кода запустить через node (т.е. так node db.js), то работает! Ну в принципе, всё верно, ведь npx — надстройка над npm, а npm — менеджер зависимостей. Т.е. запускает не сам файл, а целую пачку всякого, завязанное через json-файлы.

Я пользуюсь npx, поскольку тесты — это огромная пачка всевозможных библиотек со своими зависимостями. Но для теста базы данных должно хватить node.

Попробуем.

Есть! Библиотека pg позволила подключиться к базе! Значит база в порядке.

Выдрал хелпер, высмаркался в него, вытер об него ботинки и выкинул. Образно говоря…

А потому, что написал свой! И он, после 5-ти часов напряжения и отчаяния, работает!

Вынес его в отдельный файл, подключил к CodeceptJS через конфиг. Вот код метода.

//Работа с PostgresSQL
module.exports = function() {
  return actor({
                connect: async function(query_str) {
                    var resdata = [];
                    const dostup = this.getDbParams();
                    const { Pool } = require('pg');
                    const pool = new Pool(dostup);
                    const client = await pool.connect();
                    const result = await client.query({
                      //rowMode: 'array',
                      text: query_str
                    });
                    resdata = result.rows;
                    await client.end();
                    //console.log(resdata);
                    return resdata;
        }
  });
}

 

В файл steps_file.js добавил метод (getDbParams), который содержит реквизиты доступа к базе. Так удобнее. Заменил на нужные, и не нужно менять метод доступа к самой базе.

В тестах запрос запускается вот такой строчкой. Она между двумя (I.say).

...	
I.say('Тестирую соединение с базой данных', 'green');
var results_ob = await PgDb.connect('SELECT * FROM my.users WHERE username = \'' + username + '\';');
I.say('Вывожу имя пользоветеля - ' + results_ob[0].firstname, 'green');
...

Вот теперь можно и поесть, и педальки покрутить.

Ушёл снимать стресс. После «обеда» нужно попытаться реализовать тесткейс, в котором будет сразу три обращения к базе данных.

Уфф. 11-й километр был явно лишним.

Тренажёр на сегодня всё. Всего вышло 11 км — 38 минут. Бодрости не ощущаю. Ну… не очень и хотелось.

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

С. опять мандражирует. Ей нужно рассчитать корпус девайса, который она проектирует. Можно конечно всё бросить и сделать за неё, но это будет ошибкой. Приходится терпеть. Пусть учится справляться. Впрочем, проконтролировать, похоже, придётся.

Нужен ещё один созвон. Так задача пойдёт быстрее, но сначала сладкий чай. Пока крутил педали, залез в закрома организма, и теперь восполняю гликоген.

Итак. Расчёт корпуса откладывается на вечер. Созвон отменился. Ну и прекрасно. У меня тут тест стынет. Им и займусь.

Рабочий день закончился 15 минут назад. Учитывая, что вчера работал до 0:30, сегодня решил закончить вовремя. Ну почти. Нужно хотя-бы шага три бабахнуть.

Но перед этим, почитал Катара. Два дня к книге не притрагивался. Лучше бы и дальше… Когда у главгероя убивают жену, калечат ученицу, а верный ИИ жертвует собой, чтобы сбить  преследователей со следа спасающихся детей… Впервые мне захотелось убивать массово. Не кого попало, разумеется, но «звоночек» тревожный.

Потом конечно подуспокоился… немного. Всё-таки убийство — грех. Да и массовость… Там хватило бы кое-кому просто кисти рук отрубить. Гавнюк бы выжил, да и протезы в той вселенной не чета нашим. Или просто временно вывести его из строя. Усыпить чем-нибудь. Было бы достаточно, пожалуй. Могло бы быть. Но увы.

Книгу отложил. Тест писать — продолжил. Позже почитаю. Ну нафиг. Лучше уж поработать чуть-чуть.

Кейс оказался более сложным, чем ожидал. Не потому, что именно сложный, а из за того, что личный кабинет (в котором происходит дело) дичайше тормозит.

Может у меня интернет глючит. Или ещё какие дела. Вот не знаю. Но факт. Каждое действие (даже просто загрузка) ожидается минут по пять. И я почти не преувеличиваю.

Плюс, имеется вилка. Кнопка при входе в кабинет может иметь два положения. Т.е. надо выявить неправильное и кликнуть по значку, а затем дождаться когда станет правильным. А ждать долго.

В общем, за бортом 20:48. Я офф.

=== Заметки ===

Всё. Хаб не выдержал жары. Хорошо, что была замена.
5 минут. Полёт нормальный.

Стоило случайно открыть резюме во внешку, как получил сразу 3 предложения о работе. Одно - просто мечта.
Срочно закрыл. Я знаю, это глупо и даже по-идиотски, но не могу себя заставить бросить проект не доделав и подвести ребят.
Это проблема. Может обратиться к психологу?

Забавно. Один из моих отзывов отклонили, сославшись на то что он оскорбительный и содержит ненормативную лексику.
Не знал, что слово "недоумки" - ненормативка.
В остальном, не удивлён. Гласность хороша лишь там, где нужно расшатать государство.

Ещё...

Напишите комментарий