Ответы пользователя по тегу JavaScript
  • Почему не удаётся авторизоваться?

    @de1m
    Вас вот эта строчка не смущает?
    TypeError [ERR_INVALID_CHAR]: Invalid character in header content ["Authorization"]

    Я так понимая, что сервер от клиента что-то не то в header'e для авторизации получает.
    Надо смотреть, что там должно приходить и что приходит на самом деле.
    Ответ написан
  • Можно ли отказаться от socket.io в пользу ws?

    @de1m
    Плюс в том, что если к клиент или кто-то на пути не поддерживает вебсокет, то тогда socket.io может переключиться на POST и GET. Чистый вебсокет так не может. У меня такое было, когда nginx прокси был криво настроен и не поддерживал вебсокет.
    Минус в размере, клиенту надо скачивать библиотеку socket.io.
    Ответ написан
    Комментировать
  • Как достать данные с модуля который дергает базу, nodejs/express?

    @de1m
    Можено сделать с callback'ом
    var getDataFromDatabase = function () {
      var arr = []
      var con = mysql.createConnection(conf.config);
      con.connect(function (err) {
    
        if(err) throw err;
        con.query("SELECT DID, DName FROM Device")
        .on('result', function (data) {
          arr.push(data)
        })
        .on('end', function () {
          return callback(null, arr);
        })
        .on('error', function(err){
            return callback (err, null);
        });
    }
    
    module.exports = {
        getDataFromDatabase
    }


    Потом вызываете
    var fromDB = require(./modulName);
    fromDB.getDataFromDatabase(function(err, result){
        if(err){
            console.log(err);
        } else {
            console.log(result);
        }
    })


    Можно сделать через промис
    var getDataFromDatabase = function (callback) {
        return new Promise((resolve, reject) => {
            var arr = []
            var con = mysql.createConnection(conf.config);
            con.connect(function (err) {
    
                if (err) throw err;
                con.query("SELECT DID, DName FROM Device")
                    .on('result', function (data) {
                        arr.push(data)
                    })
                    .on('end', function () {
                        return resolve(arr);
                    })
                    .on('error', function (err) {
                        return reject(err);
                    })
            });
        })
    }
    
    module.exports = {
        getDataFromDatabase
    }

    Вызов
    var fromDB = require("./modulName");
    fromDB.getDataFromDatabase()
        .then(result =>{
            console.log(result);
        },(err)=>{
            console.log(err);
        })


    Ну и через асинхрнные функции тоже
    var getDataFromDatabase = async function (callback) {
        return new Promise((resolve, reject) => {
            var arr = []
            var con = mysql.createConnection(conf.config);
            con.connect(function (err) {
    
                if (err) throw err;
                con.query("SELECT DID, DName FROM Device")
                    .on('result', function (data) {
                        arr.push(data)
                    })
                    .on('end', function () {
                        return callback(null, arr);
                    })
                    .on('error', function (err) {
                        return callback(err, null);
                    })
            });
        })
    }
    
    module.exports = {
        getDataFromDatabase
    }

    Вызов
    var fromDB = require("./modulName");
    var test = await fromDB.getDataFromDatabase();


    Возможно я где-то ошибся, писал по памяти.
    Вот тут я почти всё писал на асинхронных функциях может быть что-то полезное найдёте.
    Ответ написан
    2 комментария
  • Как вызывать скрипт каждые 30 минут?

    @de1m
    Если у вас скпипт написан на node.js, то использование node-cron ещё как-то оправдано, а если нет, то лучше не надо.
    Ответ написан
    Комментировать
  • На сколько хорошо нужно знать JS, для того что бы перейти к изучению Node js?

    @de1m
    чтобы перейти к изучению Node.js, надо просто перейти к изучению node.js
    Блин любят люди огороды городить, придумываешь проект и понёсся, в непонятных местах (в начале будет много либо всё непонятно) читаешь теорию.
    От всего остального типа асинхронности и типов данных ты никуда не уйдёшь и они придут по ходу выполнения проекта.

    Может быть не очень очевидный пункт для новичка (да и для многих остальных тоже) в ноде можно писать не только что-то для веба, но и просто консольные программы. Я уже для бэкапа кое-что писал и для мониторинга. У нас на фирме node.js стандартный язык для написания всяких скриптов.
    Это я всё к тому, что не надо зацикливаться только на вебе, когда говорят про node.js.
    Ответ написан
    Комментировать
  • Что делать, если nodemon постоянно пересобирает проект?

    @de1m
    я скачал, у меня то же самое, может стоит попробывать supervisor? Я обычно им пользуюсь, делает вроде бы то же самое.
    Ответ написан
  • Как уйти от callback hell в node.js?

    @de1m
    Раз тут идёт речь про всю это лапшу, то может мне кто-то может объяснить.
    У меня есть несколько слудующих друг за другом действий, причём надо дождаться, пока завершится предыдущая операция, прежде чем можно делать дальше.
    1. Проверить, работает ли ssh соеденение
    2. Проверить, работает ли ssh соеденение к другому серверу
    3. Выполнить следующий шаг

    Функция:
    backupRun.prototype.checkSSHConnection = async function (serverName) {
        var self = this;
        var exec = self.bConfig.clientserver[self.eServer]
        var client = self.bConfig.clientserver[serverName]
    
        return new Promise((resolve, reject) => {
            self.runUnderSSH("hostname", self.sshkey, exec, client)
                .then((sshOutput) => {
                    return resolve(sshOutput);
                }, (sshOutputErr) => {
                    return reject(sshOutputErr)
                })
        })
    
    };


    Чтобы пройти все три шага у меня сделанно так
    backupJob.checkSSHConnection(program.exec) //check ssh to exec server
              .then((response) => {
                logger.debug("SSH test connection to exec " + program.exec + " successfull");
    
                backupJob.checkSSHConnection(program.server) //check ssh connection to backup server
                  .then((response) => {
                    logger.debug("SSH test connection to backup server " + program.exec + " successfull");
    
                    backupJob.createBackupPrePostCommands('prerun') //create backup server prerun commands
                      .then((backupPreRun) => {
                        logger.debug("Create backup prerun commands");
                              }, (err) => {
                                logger.error("Error: config array was not generated " + err);
                              })
                          })
                      })
                  }, (error) => {
                    logger.error("SSH test connection to backup server " + program.exec + " failed: " + error);
                  })
              }, (error) => {
                logger.error("SSH test connection to exec " + program.exec + " failed: " + error);
              });


    То есть та же лапша, но только с async/await.
    Теперь собственно вопрос, можно это как-то по другому сделать или от этого никуда не уйти? Причём это всё выглядит при callback, promise и async/await примерно одинаково.
    Всю это полностью можно увидеть тут
    Ответ написан
  • Как запустить коллбек после асинхронных функций?

    @de1m
    В данном случае они не очень сильно помогут, там будут такие же вложения, может быть немого более читаемо.
    Я похожее делал через async/await, но там тоже надо было дождаться выполнения предыдущей команды, обработать результат и передать дальше. Тоже что-то такое получается, посмотрите вот тут с 180 строки
    Ответ написан
    Комментировать
  • Как быстро и эффективно освоить Node.js+Express?

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

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

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