• Как загрузить чужой сайт на свой домен в nginx?

    Denis_maker
    @Denis_maker Автор вопроса
    ✔ Инженер-программист. Веду весь спектр разработки
    Отвечаю на свой же вопрос спустя время. Вот правильная конфигурация для nginx сервера, чтобы на своё доменное имя загрузить другой сайт:
    server {
      listen 80;
      listen [::]:80;
      server_name ваш-домен.ру;
      return 301 https://$host$request_uri;
      
      location / {
        proxy_pass https://берём-содержимое.ру;
      }
    }

    И на него можно установить свой SSL сертификат, вот пример:
    server {
      listen 443 ssl;
      listen [::]:443;
      server_name *.ваш-домен.ру ваш-домен.ру;
        ssl_certificate /etc/letsencrypt/live/ваш-домен.new/cert.crt;
        ssl_certificate_key /etc/letsencrypt/live/ваш-домен.new/private.key;
      location / {
        proxy_pass https://берём-содержимое.ру;
      }
    }
    Ответ написан
    Комментировать
  • Не работает "reconnect" в socket io, почему?

    Denis_maker
    @Denis_maker Автор вопроса
    ✔ Инженер-программист. Веду весь спектр разработки
    Не получилось разрешить этот момент. Пришлось откатиться до версий пониже. Комбинация, которая работает:
    на сервере: "socket.io": "^2.4.1",
    на клиенте (приложение): "socket.io-client": "^2.4.0"
    на клиенте (админка-ангуляр): "ngx-socket-io": "^3.2.0",
    Ответ написан
    Комментировать
  • Ionic 5: Открытый ранее компонент продолжает работать в фоне. Как исправить?

    Denis_maker
    @Denis_maker Автор вопроса
    ✔ Инженер-программист. Веду весь спектр разработки
    И так, вот развязка: при открытии страницы создаются socket слушатели. Именно они создают эту проблему, поскольку продолжают существовать после закрытии страницы. При открытии страницы последующие разы слушатели продолжаются создаваться, их становится больше.
    Решение: закрывать сокет-слушателей при выходе со странице. Здесь написано, как это сделать: https://qna.habr.com/q/1006197 (в комментариях к вопросу, отмеченному как ответ есть код и обоснование)
    Ответ написан
    Комментировать
  • Почему скомпилированное приложение в nwjs не видит puppeteer?

    Denis_maker
    @Denis_maker Автор вопроса
    ✔ Инженер-программист. Веду весь спектр разработки
    Решение такое: я вынес папку с браузером в другое место:
    из "C:\ . . . \node_modules\puppeteer\.local-chromium\win64-818858\chrome-win"
    сюда: "C:\chrome-win"
    А в коде прописываю:
    browser = await puppeteer.launch({
          executablePath: 'C:\chrome-win',
          headless: true,
          args: [
            '--no-sandbox'
          ]
       });

    В этом случае скомпилированное приложение видит браузер и отлично с ним работает. После этого недоразумения попробовал electron - там всё по умолчанию заработало и работает всё по ощущениям шустрее как-то. Теперь рекомендую его:
    https://www.electronjs.org/
    Ответ написан
  • Cобытия не прослушиваются в связи socket.io и socket.io-client, Nodejs, Angular?

    Denis_maker
    @Denis_maker
    ✔ Инженер-программист. Веду весь спектр разработки
    Привет, ты нашёл решение проблемы? У меня такой же вопрос:
    https://qna.habr.com/questionversion?question_id=1...
    Ответ написан
    Комментировать
  • Где найти кликер для браузера, чтобы он вводил ещё данные с клавиатуры?

    Denis_maker
    @Denis_maker
    ✔ Инженер-программист. Веду весь спектр разработки
    Можно самостоятельно, путём программирования реализовать задуманное. Для этого подойдёт следующая связка: node.js + puppeteer. Последний устанавливается вместе с браузером chromium - умеет имитировать действия пользователя. Через код вы можете переходить по страницам, кликать на элементы, делать скриншоты страниц, вводить текст с клавиатуры, отслеживать появление смс и многое другое :)
    https://www.npmjs.com/package/puppeteer
    Ответ написан
    Комментировать
  • Как правильно вызывать скрипты и команды других ЯП, используя Node?

    Denis_maker
    @Denis_maker
    ✔ Инженер-программист. Веду весь спектр разработки
    Есть протоколы передачи данных. Например, по http протоколу, либо TCP, если это что-то более низкоуровневое, вот кстати библиотека для того, чтобы работать с TCP в ноде:
    https://nodejs.org/api/net.html
    Соответственно, можно сделать модульную программу, где каждый отдельный блок будет увязан между собой (например: Node + pythone + C + C#). В каждом модуле необходимо установить слушатель определённого порта, считывать от туда полученные команды, после отработки отправлять ответ обратно или на другой порт, следующему модулю, как-то так. Если слишком абстрактно написал, попробую дополнить ответ позже)
    Ответ написан
    Комментировать
  • Почему Angular обновляет переменную в DOM только один раз?

    Denis_maker
    @Denis_maker
    ✔ Инженер-программист. Веду весь спектр разработки
    Вот здесь пример, как подписаться на переменную в сервисе.
    https://stackoverflow.com/a/43161506
    Без такой подписки на событие в сервисе, данные подгружаются единожды в момент времени.
    Ответ написан
    Комментировать
  • Как сохранить результат работы скрипта для пользователя при перезагрузке страницы, а может быть даже навсегда?

    Denis_maker
    @Denis_maker
    ✔ Инженер-программист. Веду весь спектр разработки
    Локальное хранилище есть, смотри:
    1) Вот так записать что-либо в хранилище:
    localStorage.setItem('name', 'Tom');
    2) Вот так считать ранее записанные данные:
    let test = localStorage.getItem('name');
    console.log('test = ', test);

    данные, находящиеся в свойстве localStorage, не имеют ограничений по времени хранения
    Ответ написан
  • Выравнивание контейнера flex?

    Denis_maker
    @Denis_maker
    ✔ Инженер-программист. Веду весь спектр разработки
    Привет! Как вариант, пробуй)
    <div style="display: flex; width: 100%; height: 100px; background-color: red;">
    	<div style="display: flex; height: 100%; width: 50%; background-color: grey;">
    		<div style="background-color: green; height: 100%; width: 50%;"></div>
    		<div style="background-color: blue; height: 100%; width: 50%;"></div>
    	</div>
    </div>

    Вот аналог на Bootstrap с центрированием, если используешь его)
    <div class="row">
        <div class="col-12 col-sm-6 d-flex align-items-center justify-content-betwee" style="border: 2px solid #2fc7f7;">
            <div style="height: 100px; width: 50%; background-color: green;">
            <div style="height: 100px; width: 50%; background-color: blue;">
        </div>
    </div>
    Ответ написан
  • Как правильно сохранять токен авторизации?

    Denis_maker
    @Denis_maker
    ✔ Инженер-программист. Веду весь спектр разработки
    Если ты попадаешь на второй сайт через первый - ты можешь что-нибудь туда передавать, для автоматической авторизации пользователя. Есть такая штука, JWT токен - может эта технология поможет в решении задачи.

    На счёт Куки: если у тебя оба сайта на одном домене, допустим "сайт.ру" и "админка.сайт.ру" - то на основном сайте "сайт.ру" - ты можешь установить куки для всех под-доменов. Только так, иначе не работает)
    Ответ написан
  • Как залить сайт на хостинг reg.ru?

    Denis_maker
    @Denis_maker
    ✔ Инженер-программист. Веду весь спектр разработки
    Привет! На обычном хостинге это не заработает, нужно чтобы был сервер - VDS, VPS... Распишу на примере таймвеба: Сервер Вы арендуете с какой-нибудь ОС, допустим, ubuntu. На ней должен стоять nginx, не apache! После успешной установки, загружаем наш проект в какую-нибудь директорию.
    После этого нужно прописать наш проект в файлик конфигурации, лично у меня он по этому адресу лежит:
    /etc/nginx/sites-available/hello-world.conf

    Здесь в код добавляем вот это:

    # Делаете сервер вот так. После этого по нужному url будет отображаться Ваш проект без порта (:3000 к примеру)
    server {
      listen 80;
      listen [::]:80;
      server_name твой-сайт.ру;
      client_max_body_size 100M;
      location / {
        proxy_pass http://localhost:8080; #Это порт, на котором работает Ваш проект
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;    
      }
    }


    Важно после этих манипуляций к доменному имени прикрепить IP адрес сервера (Запись "А"). Вообще, ребята из поддержки помогают всё это дело запустить, главное загрузить исходники и написать в поддержку)

    Ну и всё в принципе. Запустить проект - запускаешь так же, как у себя локально. Я использую pm2, чтобы он работал в "фоновом режиме".

    putty - программа для удалённого подключения к серверу и управления им через консоль
    FileZilla - программа, чтобы файлы на сервер отправлять и скачивать.

    Если мой ответ - то, что было нужно, с Вас галочка)
    Ответ написан
    Комментировать
  • Как сделать репорт в виде скриншота во время тестирования на node.js?

    Denis_maker
    @Denis_maker
    ✔ Инженер-программист. Веду весь спектр разработки
    Тебе поможет puppeteer - это "консольный браузер", который через js выполняет нужные тебе действия на странице:
    https://www.npmjs.com/package/puppeteer
    вот как зайти на сайт и сделать скриншот с помощью этой технологии:
    const puppeteer = require('puppeteer');
    
    test();
    
    async function test() {
     const browser = await puppeteer.launch({
        headless: true,
        args :[
          '--no-sandbox'
        ]
      });
    
     const page = await browser.newPage();
      await page.setViewport({
        width: 1366,
        height: 768,
        deviceScaleFactor: 1,
      });
      await page.goto('https://ваш-сайт.ру', {
        waitUntil: 'networkidle2'
      })
     await page.waitForTimeout(1000);
     await page.screenshot({ path: 'example.png' });
     await browser.close();
    }
    Ответ написан
    Комментировать
  • Как сделать POST запрос, крик души?

    Denis_maker
    @Denis_maker
    ✔ Инженер-программист. Веду весь спектр разработки
    На клиенте пиши так:
    import { HttpClient, HttpHeaders } from '@angular/common/http';
    
    export class Твой_класс {
    
      headers = new HttpHeaders();
      options = { headers: this.headers, withCredintials: false };
    
      constructor(private http: HttpClient) {}
    
      post(data: any) {
        this.http.post('https://........./', data, this.options).subscribe(data => {
           console.log('Ответ сервера: ', data); 
           // Затем смотри, что лежит в data, вероятно просто json поломанный приходит.
           // Проверить ответ на корректность можно здесь: http://json.parser.online
        }
      }
    }
    Ответ написан
  • Как AJAX-ом из PHP получить компонент "mdbootstrap select" так, чтобы он заработал?

    Denis_maker
    @Denis_maker Автор вопроса
    ✔ Инженер-программист. Веду весь спектр разработки
    Решение: Если из PHP вместе с вёрсткой передавать вот такой код инициализации, то компонент загружается как надо. Важно: mdb-select нужно менять на свой селектор, иначе при повторной подгрузке такого кода предыдущие компоненты будут инициализироваться повторно и ломаться.
    $(document).ready(function() {
    $('.mdb-select').materialSelect();
    });
    Ответ написан