Ответы пользователя по тегу Express.js
  • Создание диалогов Node.js и Socket.io?

    @de1m
    У socket.io есть же rooms/namespaces. Нельзя разве их использовать?

    Или что-то такое( с той же страницы)
    Клиент
    socket.on('connect', function () {
      socket.emit('join', {email: user@example.com});
    });


    Сервер
    io.on('connection', function (socket) {
       socket.on('join', function (data) {    
        socket.join(data.email);
      });
    });


    Посылаем сообщение со стороны сервера
    io.to('user@example.com').emit('message', {msg: 'hello world.'});


    Получаем у клиента
    socket.on("message", function(data) {
      alert(data.msg);
    });
    Ответ написан
    Комментировать
  • Как совместить Vue и Express в SPA?

    @de1m
    Посмотрите вот тут, я стал переделывать на vue и express, но потом передумал.
    Ответ написан
    Комментировать
  • Как отдавать статичные файлы и использовать роутинг в express.js?

    @de1m
    В такой форме можно файлы со стилями отдать, если для каждого будете писать "app.get", что как-бы не очень удобно.
    У вас в "index.html" прописан адресс, где можно скачать css, вот для этого адреса вы либо пишете "app.get" либо всё таки делаете возможным скачивать статичные файлы.

    При таком подходе, пропадает необходимость использовать app.get(), так как все файлы и так будут отданы. Плюс, смущает факт того, что доступ к файлам можно получить прописав путь напрямую /home/index.html


    Вы ведь всё равно эти файлы хотите отдавать пользователю, без них работать не будет. Так что тут не страшно, если он скачать может.
    Ответ написан
    Комментировать
  • Как сделать отдельный приватный порт для express в docker?

    @de1m
    Если вы подразумеваете, что надо, чтобы другие контейнеры могли заходить на этот порт, то их надо линковать, либо можно сделать совместную сеть для них. Вот тут описано, как надо делать. Это для docker-compose написано, если что.
    Ответ написан
    Комментировать
  • Как захостить react + node.js приложение в локальной сети?

    @de1m
    "закинуть файлы в папку локальной сети" - это не будет работать, хотя может и будет, зависит от тогда, что вы под этим подразумеваете.
    А вообще нужет веб сервер, который это всё будет раздавать. Сейчас у вас наверное всё это крутится на esspress'e и по идее его надо просто запустить на сервере, но порту 80 или 443 (HTTPS).
    Ответ написан
    2 комментария
  • Как выполнить два запроса подряд?

    @de1m
    На сколько я знаю, на один post приходящий от клиента возможет только один ответ. Надо в один ответ оба вставлять.
    Ответ написан
  • Как достать данные с модуля который дергает базу, 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 комментария
  • Как уйти от 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 примерно одинаково.
    Всю это полностью можно увидеть тут
    Ответ написан
  • Как быстро и эффективно освоить Node.js+Express?

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