• Как правильно сделать сложный запрос к БД, через Node.js?

    @holllop Автор вопроса
    Прежде чем ответить, хочу поблагодарить kosuha. Ты мне очень помог реально. Как оказалось мне не нужна сложная структура типа GET запрос зависящий от POST запроса(из-за чего у меня и возникала ошибка
    TypeError: Converting circular structure to JSON
        --> starting at object with constructor 'Socket'
        |     property 'parser' -> object with constructor 'HTTPParser'
        --- property 'socket' closes the circle
    )
    дальше я приведу как я решил свою проблему
    клиент-код
    function loadSelectOptions2(url, selectElement) {
      fetch(url)
        .then(response => response.json())
        .then(data => {
          data.forEach(item => {
            const option = createOption(item.printer_id, item.material);
            selectElement.appendChild(option);
          });
        })
        .catch(error => {
          console.error(error);
          // Обработать ошибку
        });
    }
    selectElement2.addEventListener('change', () => {
        const selectedPrinterId = selectElement2.value;
        console.log('selectedPrinterId:', selectedPrinterId);
        // Очистить select3 перед загрузкой новых опций
        selectElement3.innerHTML = '';
        // Загрузить опции для select3 на основе выбранного значения select2
        if (selectedPrinterId) {
          const url = `http://:3000/printer_material?printer_id=${encodeURIComponent(selectedPrinterId)}`;
          loadSelectOptions2(url, selectElement3);
        }
      });

    код сервера
    const http = require('http');
    const express = require('express');
    const bodyParser = require('body-parser');
    const cors = require('cors');
    const db = require('./pool');
    
    const app = express();
    const port = 3000;
    
    app.use(bodyParser.json());
    app.use(
      bodyParser.urlencoded({
        extended: true,
      })
    );
    app.use(cors());
    app.get('/printer_material', (req, res) => {
      const printer_id = parseInt(req.query.printer_id, 10);
    
      console.log('Received printer_id:', printer_id); // Вывод значения в консоль как число
    
      db.getPrinter_material(printer_id, res);
    });
    http.createServer(app).listen(port, () => {
      console.log(`App running on port ${port}.`);
    });

    //pool.js
    const { response } = require('express');
    
    const Pool = require('pg').Pool;
    const pool = new Pool({
      user: '',
      host: '',
      database: '',
      password: '',
      port: 5432,
    });
    
    const getPrinter_material = (printer_id, response) => {
      console.log('Received printer_id:', printer_id); 
    
      pool.connect((error, client, release) => {
        if (error) {
          throw error;
        }
    
        const query = {
          text: `SELECT pr.printer_id, m.material FROM printer_material pm JOIN printer pr ON pm.printer_id = pr.printer_id JOIN material m ON pm.material_id = m.material_id WHERE pr.printer_id = $1`,
          values: [printer_id],
        };
    
        console.log('Query text:', query.text);
    
        client.query(query, (error, results) => {
          release();
    
          if (error) {
            throw error;
          }
    
          console.log(results.rows);
          response.json(results.rows);
        });
      });
    };
    module.exports = {
      getPrinter_material,
    };

    Я не убирал множественные console.log пока они остались так как я часть за частью проверял работоспособность кода
    Ответ написан
    Комментировать
  • CSS, как рассчитывается max-width в flex контейнере, если один из дочерних элементов имеет flex-grow = 1?

    iiiBird
    @iiiBird Куратор тега CSS
    Пока ты спишь - твой конкурент совершенствуется
    .wrapper {
        min-width: 0;
    }
    Ответ написан
    2 комментария
  • TS как вывести массив типов параметров из массива дженериков?

    bingo347
    @bingo347 Куратор тега TypeScript
    Crazy on performance...
    type ExtractGenerics<T extends readonly unknown[]> = T extends readonly []
      ? []
      : T extends readonly [G<infer V>, ...infer Next]
        ? [V, ...ExtractGenerics<Next>]
        : never;
    
    function unwrap<C extends readonly G<unknown>[]>(containers: C) {
      return containers.map(container => container.value) as ExtractGenerics<C>
    }

    https://www.typescriptlang.org/play?#code/C4TwDgpg...
    Ответ написан
    2 комментария
  • Плагин joomla и php 7.4. Почему ошибка?

    anton_reut
    @anton_reut
    Начинающий веб-разработчик
    Имя класса и имя метода в классе не должны быть одинаковыми, тебе же ясным языком это написано.
    class plgSystemFeedGator extends JPlugin
    {
    protected $interval = 300;
    
    function plgSystemFeedGator( &$subject, $params )
    {
    parent::__construct( $subject, $params );
    Ответ написан
    3 комментария
  • Как и в каких случаях использовать DI в Yii2?

    SamDark
    @SamDark
    Yii2 core team
    DI именно в вашем случае не при чём. Это способ реализации, а не сама идея. Идея состоит в том, что вам нужно реализовать принцип инверсии зависимостей. То есть начать работать с интерфейсами, а не с конкретными реализациями.

    Чтобы быть универсальным и переносимым, модуль не должен знать о моделях извне себя. Вместо этого он должен выражать свои требования в виде интерфейса, а внешние модели этот интерфейс должны реализовывать.

    Для вашего примера делаем в модуле Article делаем интерфейсы:

    interface ArticleInterface
    {
        public function getTitle();
        public function getAuthor();
    }
    
    interface ArticleAuthorInterface
    {
        public function getName();
        public function getID();
    }


    Далее в пределах модуля используем только интерфейсы, а не сами модели:

    public function renderArticle(ArticleInterface $article)
    {
        return $this->renderPartial('_article', [
             'author' => $article->getAuthor(), 
             'title' => $article->getTitle()
        ]);
    }


    Вне модуля нам придётся реализовать интерфейсы в моделях:

    class Article extends ActiveRecord implements ArticleInterface
    {
       // ...
    }
    Ответ написан
    34 комментария