• Для каких целей используется NodeJs?

    @de1m
    Я раскажу про себя, я выбрал nodejs, потому что я могу писать небольшие программы и для винды и для линукса и если надо, то могу и какой-нибудь веб сервис сделать.
    Я например написал программу для бэкапа докера, для мониторинга докера через icinga2 или сделал вебгуи для apache derby.
    Всё пишется более или менее быстро и есть куча модулей.
    Ответ написан
    Комментировать
  • Как значение в функции сделать глобальным node.js?

    @de1m
    Через async должно работать. Надо только nodejs 7.7.4, у меня на этой версии работает.
    var output;
    var genNum = async function () {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                return resolve(Math.random())
            }, 1000)
        })
    }
    
    output = await gennum();
    console.log(output);


    Вот тут я это использовал, можете там посмотреть.
    Ответ написан
    Комментировать
  • Используете ли вы виртуализацию для более удобной работы с несколькими проектами?

    @de1m
    По вам прям докер плачет, он как раз для токого и сделан. Понемаю, что так сразу не ясно, как это всё использовать.
    Я вам объясню на примере, вот это пример. В контейнере находится программа которая запускается по крону. В образе уже всё есть кроме трёх вещей - конфигурации крона, ssh ключа и конфигурации для самой программы(которая уже находится в образе).

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

    Обратите внимание на файл "docker-compose.yml" (для его использования помимо докера нужен так-же docker-compose) в нём описывается, как должен запускатся контейнер.
    volumes:
        - /nodejs/nodebackup/config.yml:/nodebackup/config.yml
        - /nodejs/nodebackup/id_rsa:/nodebackup/id_rsa
        - /nodejs/nodebackup/crontab.tmp:/crontab.tmp

    Volumes говорит, какие данные я хочу добавить из моего хоста в контейнер. То есть тут как раз находятся эти три файла, про которые я писал. Можно добавлять не только файлы, но и папки.

    В вашем случае вам надо взять контейнер, в котором есть питон, либо сделать самому и при запуске контейнера сказать, что хотите папку с вашим проектом примонтировать в определённое место в контейнере.

    В плюсе получется, что вам не надо нечего делать на хосте, кроме установки докера. При бэкапе нужно сохранять только данные, если проект находится в гите, то даже его ненадо сохранять.
    Ответ написан
    1 комментарий
  • Как быстро и эффективно освоить Node.js+Express?

    @de1m
    Я помню с похожим сталкивался, везде только какую-то часть объесняют, а целой картины как-то не получается.
    Поэтому советую сделать просто какой-то небольшой проект и нужную информацию и теорию читать по мере надобности.
    Ответ написан
    Комментировать
  • С чего начать изучение электроники?

    @de1m
    Не слушай их ). Я просто похожий путь прошел. Если ты будешь так делать, то будешь год учить теорию, чтобы потом подключить три датчика к своему контроллеру, но скорее всего тебе теория надоест и ты всё забросишь. Читай теорию по надобности, а не просто так.
    Не бери ардуино, бери сразу esp8266, которые выглядять как ардуино, можно потом при желание и wifi прицепить и с памятью побольше.
    Потом берёшь дачтик чего-нибудь и смотришь как его подключили другие, 100%, что найдёшь информацию и делаешь так-же, со временем появится опыт и всё пойдёт. ;-)
    И если есть желание читаешь паралельно теорию.
    Ответ написан
    2 комментария
  • Как в библиотеке socket io понять кто вышел из сайта?

    @de1m
    При соеденении присваеваете id, что-то типа
    io.sockets.on('connection', function (socket) {
         clientid = socket.id;


    А при дисконнекте, смотрите какой id
    Ответ написан
    Комментировать
  • AMS1117 почему просидает напряжение?

    @de1m Автор вопроса
    Приделал два конденсатора(электролит) паралельно между землёй и 3.3/5в на 100 нФ, эффекта нету.
    Ответ написан
  • Как дождаться конца request?

    @de1m Автор вопроса
    Проблему я решил.
    Выгдлядит это теперь вот так:
    var req = https.request(options, function(res){
          res.on('data', function(chunk){
            resData += chunk;
          })
          res.on('end', function(){
            if (res.statusCode == "200") {
              var output = JSON.parse(resData);
              return callback(null, output.results);
            } else {
              return callback({
                "Statuscode": res.statusCode,
                "StatusMessage": res.statusMessage
              }, null);
            }
          })
        });
        req.end(JSON.stringify(filter));


    Опции и верхнюю часть в целом я не стал добавлять.
    Ответ написан
    Комментировать
  • Как собрать проект на electron?

    @de1m
    Я делал через electron-packager. Правда в конце получается папка а не exe, но там я уже думаю надо как-то по другому дальше делать.
    Ответ написан
    2 комментария
  • Node в андроид есть?

    @de1m
    Можно ещё react native использовать. На хабре была статья про него.
    Ответ написан
    Комментировать
  • Как сформулировать подключение socket.io по https и http на примере?

    @de1m
    На одном порту работать не будет, надо два порта.
    Я поменял пример, но этот у меня точно работает, всего на двух портах
    var express = require('express');  
    var app = express();  
    var server = require('http').createServer(app);  
    var io = require('socket.io')(server);
    var fs = require('fs');
    var https = require('https');
    
    app.set('views', __dirname + '/views')
    app.set('view engine', 'pug')
    app.use(express.static(__dirname + '/public'))
    
    server.listen(5000, function () {
      console.log('Server listening at port %d', 5000);
    });
    
    const opts = {
      key: fs.readFileSync('privateKey.key'),
      cert: fs.readFileSync('certificate.crt')
    }
    
    var httpsServer = https.createServer(opts, app);
    httpsServer.listen(5001, function(){
      console.log("HTTPS on port " + 5001);
    })
    
    app.get('/', function (req, res) {
      res.render('index');
    })
    
    io.attach(httpsServer);
    io.attach(server);
    
    io.on('connection', function(client) {  
        console.log('Client connected...');
        client.on('click', function(data){
          console.log(JSON.parse(data));
            setTimeout(function() {
              client.emit("ok", "data");
            }, 3000);
        })
    });


    Со стороны клиента надо добавить проверку http или https.
    if (window.location.protocol != "https:"){
            var socket = io.connect('https://localhost:5001');    
        } else {
            var socket = io.connect('http://localhost:5000');
        }
    Ответ написан
    8 комментариев
  • Как реализовывать структура скрипта с асинхронными запросами?

    @de1m
    Недавно что-то такое-же надо было. К примеру - у меня есть массив с серверами и на каждом сервере у меня есть несколько папок, которые надо проверить.
    self.startVerifyBackup(listOfServer).then(function (outArr) {
            return callback(null, outArr);
          }).catch(function (err) {
            return callback(err, null);
          });

    Здесть я передаю массив с серверам.
    Вот сама функция
    verifyBackup.prototype.startVerifyBackup = function (folderList) {
      var self = this;
    
      return Promise.all(folderList.map(function (folder) {
        return self.checkFolder(folder);
      }));
    };

    И функция которая проверяет все папки на каждом сервере
    verifyBackup.prototype.checkFolder = function (folder) {
      var self = this;
      return new Promise(function (resolve, reject) {
        if (self.config.backupserver[self.bserver].passphrase !== undefined && self.config.backupserver[self.bserver].passphrase !== null) {
          var passphrase = "PASSPHRASE=" + self.config.backupserver[self.bserver].passphrase;
        } else {
          var passphrase = "";
        }
        if (self.config.backupserver[self.bserver].tmpdir !== undefined && self.config.backupserver[self.bserver].tmpdir !== null) {
          var btemp = self.config.backupserver[self.bserver].tmpdir;
        } else {
          var btemp = "";
        }
    
        var command = "sudo " + passphrase + " duplicity verify file://" + folder + " " + btemp;
        self.runSSH(command, self.sshkeypath, self.eserver, self.bserver, function (err, data) {
          if (err) {
            return reject(err);
          } else {
    
            var output = data.toString().split("\n");
            output.splice(0, 2);
            var objReturn = {
              name: folder,
              output: output
            };
            return resolve(objReturn);
          }
        });
      });
    };


    Примерно так это должно выглядить, хотя я думаю, что у меня ошибки немного не верно обрабатываются.
    Ещё вместо promis'ов можно использовать библиотеку async. Но адепты promis'ов против, хотя там больше возможностей.
    Ответ написан
    Комментировать
  • Почему возникает ошибка?

    @de1m
    Я погуглил и погадал(приходится, так как самого кода тут вы не выложили) за вас. Может это ваш случай
    Пишут, что не хватает response.end();
    Ответ написан
    Комментировать
  • Как обойти cобытийную модель js?

    @de1m
    Можно использва "async", замечательно для таких ведей подходит.
    Делаете массив с функциями и потом этот массив скармливается "asycn.parallel" или "async.serial", в зависимости от того хотите вы их последовательно или паралелльно выполнять.
    Ответ написан
  • Как сделать чтобы при push в master на сервере подтягивались изменение?

    @de1m
    Git Runner вам поможет. На хабре про него писали
    Ответ написан
    Комментировать
  • Как разрабатывать под микроконтроллеры в linux?

    @de1m
    1. Протеус 7 под wine'ом работает хорошо
    2. Пользовался cp2102 и ft232, тоже хорошо рабоет
    3. Я пользую еclipse. Для неё есть модуль "AVR Eclipse Plugin" (тут)
    Ответ написан
    Комментировать
  • Несколько вопросов по NodeJS?

    @de1m
    В прошлом году сидели на работе и думали на чём бы писать скрипты, чтобы и в виндовсе и в линуксе работало (ну может с небольшыми изменениями) и решили писать как-раз на ноде. Я написал программу, которая делает бэкапы с докера и просто файлы может сохранять, всё работает и те вещи которые вы описали тоже работают. Для ноды есть куча модулей для очень многих вещей, почему-то так сложилось, что многие думают, что нода только для веба(хотя и очень удобно).
    Когда появиться немного опыта, то можно вполне быстро писать веб морды к каким-нибудь полезным вещам. Я вот писал для apache derby (тут), потом ещё за три дня прикрутил active directory аутентификаю.
    Ответ написан
    Комментировать
  • Как перенаправить поток и записать данные в переменную?

    @de1m
    Я так думаю, что вам надо использовать второй пример, где есть callback. Как-то так:
    var exec = require('ssh-exec')  
    
    exec('ls -lh', {
        "user": "de1m",
        "host": "localhost",
        "password": "pass"
    }, function (err, stdout, stderr) {
      console.log(err, stdout, stderr)
    })

    err - если будет ошибка в соедении
    stdout - если всё нормально
    stderr - если команда возвращает что-то больше "0"

    Но вообще я бы рекомендовал использовать "ssh2" модуль напрямую.
    Ответ написан
    Комментировать
  • Как в nodejs сделать синхронные операции с передачей файлов по сети?

    @de1m
    Монжо использова для этого async модуль (ту часть, где про серийное исполнение). Тут
    Если надо, то могу добавить пример, но только завтра (пример на работе)
    Ответ написан
    Комментировать
  • Какой модуль ssh для Node подойдет?

    @de1m
    Я не так давно писал небольшую программу, чтобы сохрянять контейнеры. Для этого я использовал ssh2
    Я не до конца понял, что вы подрузамеваете под "ответы не на каждую команду" и " даже команды автодополнения"
    Данный модуль может держать соедение (есть keepalive), выдаёт все что пишет консоль (отличает так-же errorcode 0/>0).
    Ответ написан
    Комментировать