Ответы пользователя по тегу Node.js
  • Как запустить бинарный поток с клиента на сервер?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Можно, через websocket. Есть даже готовый npm пакет для этих целей websocket-stream

    Use HTML5 websockets using the Node Streams API.

    Usage
    This module works in Node or in Browsers that support WebSockets. You can use browserify to package this module for browser use.


    Или вам нужен чистый http?
    Ответ написан
  • Как запустить приложение на разных субдоменах?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Думаю самым простым и правильным решением будет разруливать субдомены и соответственно висящие на них приложения через nginx.

    Вы сможете запускать свои приложения как на одном хосте и даже в одном докер контейнере (на разных портах) так и на разных хостах и перенаправлять входящие по 80 порту запросы на ваши приложения по признаку субдомена. Так же вы сможете получив один сертификат выписанный для основного домена и субдоменов и подключив его через nginx, вы получите https не заморачиваясь настройкой и подключением сертификатов непосредственно в коде ваших приложений. Так же вы получите удобный инструмент балансировки нагрузки между вашими субдоменами и много других плюшек.
    Ответ написан
  • Как сделать свою обёртку fs?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    const fs = require('fs');
    
    ...
    
    exports.readdir = fs.readdir;
    Ответ написан
  • Как запустить bat файл от имени админа или exec на node.js в windows?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Запустите ваш index.js под админом
    runas /user:username "node index.js"

    Где username имя пользователя-администратора
    Ответ написан
  • Как понять сколько тредов способна выдержать node.js?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Очень часто под трэдами имеют ввиду как потоки так и параллельные процессы.

    Если под трэдами вы подразумеваете процессы, то в nodejs они реализуются с помощью worker-ов. других реализаций насколько я знаю в ноде нет. Про них немного написано тут и тут (в комментариях намекают на тесты производительности и прочего, возможно даже кто то проводил оные)
    Если же вы интересуетесь потоками, то о с ними можно немного ознакомится тут

    Для более развернутого ответа хотелось бы более развернутый вопрос.
    Ответ написан
  • Express js что не так с роутингом?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    сделайте роутер auth так:

    const express = require('express');
    const router = express.Router();
    
    router.get('/', (req, res) => res.render('/auth'));
    router.post('/', (res, req) => {
      console.log(req.body);
      res.json({
        ok: true
      });
    });
    
    module.exports = router;
    Ответ написан
  • Как отловить в коде что IP заблокирован?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Таймаут реквесту поставить. Если ответ не пришел до истечения таймаута, то "не ок"
    Не знаю возможности модуля request и посмотреть нормально не могу, с телефона не удобно, поэтому могу предложить только универсальное, но не очень верное идеологически решение:

    var options = {
      url: url,
      encoding: null,
      timeout: 60*1000
    };
    
    function req(opts, cb){
      var isTimeout = false;
      setTimeout( ()=>{
         if( isTimeout) return;
         isTimeout = true;
         cb("time is out", {});
      }, opts.timeout);
      request.get(opts, function (err, res) {
      // сюда не попадает уже.. ;) виснет на запросе.
        if( isTimeout ) return;
        isTimeout = true;
        cb(err, res);
      });
    )
    
    // выполняем запрос с таймаутом в 60 сек.
    req(options, function(err, res){
        if (err) {
            console.log('не ok');
        } else {
            console.log('ok');
        }
    });


    PS: правильным решением будет делать так как это сделано в Вашем примере, но добавив в options значение таймаута. Поищите в офдоке модуля request как это делать.
    Ответ написан
  • Какую БД выбрать для Electron-приложения?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    для реляционной БД - SQLite
    для NOSQL БД - nedb (хабр. nedb полностью встраиваемая в приложение, почти в полном объеме реализует систему запросов как в mongodb)
    Ответ написан
  • Как сделать временную ссылку?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Да, вполне.

    Для этого необходимо:
    1. Создать табличку в бд (или файлик) для хранения временных ссылок: соответствия абракадабры и имени файла на диске или ссылки на файл в Интернете, срока жизни ссылки, прав доступа и т.п.
    2. Создать роутер в экспрессе, например такой:

    ...
    app.use('/temp/:id', function(req, res, next){
      // console.log('ID:', req.params.id);
    
      // тут абракадабра лежит в req.params.id
      // далее вы достаете из БД данные о
      // полученом ID проверяете срок жизни
      // права доступа и отдаете локальный файл 
      // res.sendFile('/путь/до/файла/имяфайла');
    
      // либо делаете редирект на удаленный файл
      // res.redirect('remote.server/test.img');
    
      // или сообщаем о причинах отказа
      // доступа к этому файлу
      // res.send('Вы не правы:)');
    }
    ...


    ПРОФИТ.
    Ответ написан
  • Как правильно протестировать Express приложение? Запуск http сервера - это норма или нет?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Не вижу ни каких проблем связанных с использованием http серева при тестах. Более того, экспресс сам по себе является таким сервером, и все его роутеры завязаны на него, получая в реквесте кучу информации, включая http заголовки и много чего еще. Теоретически наверно можно создать систему тестирования, работающую без запуска реального сервера, но для этого по крайней мере прийдется написать свой велосипед, который будет делать вид что он http сервер и подсунуть его в экспесс вместо реального. Более того, такой велосипед должен будет в полном объеме эмулировать api модуля http. Возможно такой велик даже существует, но все это кажется мне гораздо более ненадежным и неимеющим смысла. Хотя решать конечно Вам.
    Ответ написан
  • Node js какую команду запустить чтобы увидеть приложение?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Было бы не плохо если бы вы дали ссылку на репозиторий. А так могу только перевести:)

    Clone the repository
    Сделайте клон репозитория (если реп на гите то команда git clone repoURL

    Open console in the cloned folder
    Откройте в консоли папку с клонированным репозиторием

    Run "npm install"
    Введите команду "npm install"

    Run "node ." to see the application CLI options
    Введите команду "node ." для просмотра опций консольного интерфейса приложения

    PS. Видимо вывод последней команды расскажет как запустить приложение и какие у него есть ключи
    Ответ написан
  • Не работают стили и js на html странице возвращенной с node.js сервера. Что делать?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Есть похожий вопрос на тостере: Как в Node.js отдавать статику без Express.js?

    Также Вы можете вместо модуля http использовать более высокоуровневый фреймворк Express.

    установка
    простейший web сервер
    раздача статических файлов

    пример Express приложения раздающего статику
    var express = require('express');
    var app = express();
    var port = 3000;
    
    // тут надо отметить что роутеры в Express выполняются последовательно 
    // и каждый из них имеет возможность прекратить дальнейшую обработку запроса последующими роутерами. 
    // express.static в случае нахождения запрашиваемого файла так и поступит.
    
    // любой запрос к http://вашдомен_или_IP/public будет восприниматься как запрос статики
    app.use('/public', express.static(__dirname + '/public'));
    
    // любой запрос будет восприниматься как запрос статики.
    app.use(express.static(__dirname + '/public'));
    
    
    app.use((err, request, response, next) => {
        // логирование ошибки, пока просто console.log
        console.log(err)
        response.status(500).send(‘Something broke!’)
    })
    
    app.listen(port, function () {
      console.log('Example app listening on port '+port+'!');
    });


    Ответ написан
  • Как открыть веб-сервер на Node.js для доступа из Интернета?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Как вариант для экспериментов и хомяков:
    1. Купить доменное имя (например тут, хотя выбор конечно за вами. В зоне .ru примерно 600 руб в год)
    2. Получить статический IP (купить у провайдера, примерно 50р в месяц), либо настроить чтото типа ddns (умеют почти все современные роутеры через свою вэбку).
    3. В случае статического IP настроить привязку купленного доменного имени к вашему статическому IP. Для этого порывшись по сайту конторы, продавшей вам доменное имя найти сервис DNS для их клиентов. У большинства пользование таким сервисом бесплатно.
    В случае ddns и ему подобных настроить привязку купленного доменного имени к вашей учетке в сервисе ddns
    4. Купить что то типа raspbery PI или orange PI, установить на него чтото типа armbian, nodejs, подключить к роутеру, настроить IP в локалке (пункт не обязательный, но удобства неоспоримы, висит себе бесшумно на стене возле роутера, прибитый гвоздем и раздает ваши сайты в нет :).
    5. Прокинуть необходимые порты в роутере на IP вашего сервера (raspbery PI или orange PI) (учтите что внешний порт будет 80 а внутренний на сервере скорее всего 3000. Номер внутреннего порта зависит только от того на каком порту вы запустите ваше nodejs приложение)
    6. Профит!!! Как только обновятся DNS записи (от пары минут до суток, в зависимости от выбранного DNS сервиса) вы, и весь мир вместе с вами сможет посетить ваше nodejs приложение по адресу http://ваш_домен.зона/

    PS: Далее вам останется только:
    1. Озаботится https (Let's Encrypt вам в помощь)
    2. Зарегать в вашем домене несколько поддоменов (например forum.ваш_домен.зона, game.ваш_домен.зона, chat.ваш_домен.зона, cloud.ваш_домен.зона). Хорошая новость в том, что у большинства сервисов, содержание вашего доменного имени и регистрация поддоменов бесплатны (если конечно вы их клиент - купили доменное имя у них)
    3. Установить на серв nginx и настроить его, чтобы перекидывал http запросы на https, сам проверял сертификаты и чтобы раскидывал входящие запросы по соответствующим сервисам уже в локалке и через http. (можно конечно озадачится чтобы сервисы на node сами свои сертификаты проверяли, но на мой взгляд это бессмысленно, потому что если кто взломает ваш сервер, ему будет глубоко наплевать зашифрованными или нет ходят пакеты между вашим nginx и сервисами на ноде через lo0.
    Ответ написан
  • Как использовать source в handlebars из внешнего файла, а не из инлайн код (чтобы добавить css, js и изменять title)?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Можно сделать так:
    var fs = require('fs');
    
    var source = fs.readFileSync('./template.html', 'utf8');
    
    var template = handlebars.compile(source);
    var html = template(data);
    console.log(html);


    Также, неплохой идеей было бы делать это асинхронно:
    var fs = require('fs');
    
    fs.readFile('./template.html', 'utf8', function(err, source) {
      var template = handlebars.compile(source);
      var html = template(data);
      console.log(html);
    });
    Ответ написан