Ответы пользователя по тегу Node.js
  • Как переписать функцию через промисы?

    @f_ban
    const fs = require('fs');
    const path = require('path');
    
    let pathSupplied = './';
    let extFilter = 'js';
    
    let extension = (element) => {
        let extName = path.extname(element);
        return extName === '.' + extFilter;
    };
    
    let walk = function (dir) {
        const result = [];
    
        fs.readdir(dir, function (err, list) {
            list.forEach((item) => {
                let itemPath = path.join(dir, item);
                fs.stat(itemPath, (e, stats) => {
                    if (stats.isDirectory()) {
                        walk(itemPath);
                    } else {
                        if(extension(itemPath)){
                            console.log(itemPath)
                            result.push(itemPath);
                        }
                    }
                });
            });
        });
    
        return result;
    }
    
    walk(pathSupplied);
    
    walkAsync = (dir)=>{
        return new Promise((resolve)=>{
            resolve(walk(dir))
        });
    }
    Ответ написан
    Комментировать
  • Как исправить ошибку при загрузке файла с помощью fetch?

    @f_ban
    Во-первых, ваш сервер должен уметь обработать запрос на '/data.json'.
    В приведенном же вами коде бэковой части обрабатываются запросы на: '/', '/exmpl.js', '/Gistograma.html', '/Gistogr.js', '/server1.js'. А в блоке default вообще указаны инструкции, что если придет запрос на что-то другое, что не входит в этот список, то ответить кодом 404 - стандартный код ответа HTTP, в случае если запрашиваемый ресурс не найден.

    Таким образом, если добавите что-то вроде следующего, то проблема должна быть решена:
    case '/data.json':
        const js = fs.readFileSync('data.json', 'utf8'); 
        res.writeHead(200, {'Content-Type': 'application/json'});
      		res.end(js);
    Ответ написан
    8 комментариев
  • Как валидировать форму для скачивания файла с минимумом JS?

    @f_ban
    1. Используйте input[type=submit]/button[type=submit]
    2. Подпишитесь на событие submit на форме
    3. В обработчике события запускайте загрузку файла с помощью примерно такой функции
    // https://stackoverflow.com/questions/3916191/download-data-url-file/45905238#45905238?newreg=ddb3c48865d04c319b39f772df762521
    function download(dataurl, filename) {
      var a = document.createElement("a");
      a.href = dataurl;
      a.setAttribute("download", filename);
      a.click();
    }

    3. Что касается невозможности нажатия на кнопку сабмита, если хоть одно поле формы не валидно, то навешайте примерно такой стиль:
    #someform:invalid [type=submit]{
      pointer-events: none;
      
      /* другие нужные стили, да хоть display: none; */
    }

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

    @f_ban
    function isHasPropertyChain(obj, propertyChain){
      if(!(obj instanceof Object)) throw new TypeError("obj должен быть объектом");
      if((!(propertyChain instanceof Array)) && (!(typeof(propertyChain) === 'string'))) throw new TypeError("propertyChain должен строкой или массивом");
        
      var properties = (propertyChain instanceof Array)
          ? propertyChain
          : propertyChain.split('.');
    
      if (properties.length == 0) return false;
      
      var testedProp = properties[0];
      
      var res = (testedProp in obj);
    
      if(res){
       if((properties.length > 1)){
         return (obj[testedProp] instanceof Object) &&  isHasPropertyChain(obj[testedProp], properties.splice(1));
       }
      }
      
      return res;
    }
    
    function predicator(v){
      return !isHasPropertyChain(this, v);
    }
    
    var obj = {/* тестируемый объект */};
    
    absentKeys = keys.filter(predicator, obj);
    Ответ написан
    2 комментария