Ответы пользователя по тегу Веб-разработка
  • Как сделать Object.assign, который сохранит акессоры(getters)?

    @Aves
    Object.getOwnPropertyNames(foo).forEach(function(prop) {
      Object.defineProperty(
        bar,
        prop,
        Object.getOwnPropertyDescriptor(foo, prop)
      );
    });

    Еще вариант https://developer.mozilla.org/ru/docs/Web/JavaScri...
    Ответ написан
    Комментировать
  • Как следить за процессом работы потока в %?

    @Aves
    Можно сделать что-нибудь в таком роде:
    const stream = require('stream');
    const fs = require('fs');
    
    class PercentWatcher extends stream.Duplex {
      constructor(fd) {
        super();
        this.size = fs.fstatSync(fd).size;
        this.handled = 0;
      }
      _read() {}
      _write(chunk, encoding, callback) {
        this.push(chunk);
        this.handled += chunk.length;
        console.log(`\n\n${Math.round(this.handled / this.size * 100)}%\n\n`);
        callback();
      }
    }
    
    const fd = fs.openSync('file.txt', 'r');
    
    fs.createReadStream(null, {fd}).pipe(new PercentWatcher(fd)).pipe(process.stdout);
    Ответ написан
    2 комментария
  • Как включить live preview для js в brackets?

    @Aves
    На видео автор использует dev-версию https://github.com/adobe/brackets/wiki/How-to-Hack... и исправляет конфигурацию в коде расширения. Сейчас этого делать не надо, экспериментальный режим Live Preview включается галочкой в меню Файл. Да и относится это не к js, а вроде к запуску не в отдельном браузере.

    Live Preview при изменении файлов html и css даже без сохранения по мере набора применяет изменения без перезагрузки страницы, а при изменении других файлов, в том числе js, перезагружает страницу после сохранения файла, настраивать отдельно это не нужно.
    Ответ написан
    Комментировать
  • Как интегрировать socket.io в express-generator?

    @Aves
    Да много разных способов можно придумать, например в app.js добавить
    app.io = function(server) {
        var io = require('socket.io')(server);
        io.on('connection', function (socket) {
            //...
        });
    }

    А в bin/www app.io(server);

    Или выделить обработчик в отдельный модуль
    // routes/socket.js
    function handler(socket) {
        // ...
    }
    
    module.exports = handler;
    
    // app.js
    var io = require('socket.io');
    var socket = require('./routes/socket');
    
    app.io = function(server) {
        io(server).on('connection', socket);
    };
    
    // bin/www
    app.io(server);
    Ответ написан
    Комментировать
  • Как декодировать escape строку?

    @Aves
    Вообще, конечно, странно, что браузеры, способные отобразить страницу в большинстве кодировок, в том числе и data:text/plain;charset=cp1251,%EF%F0%E8%E2%E5%F2 не дают использовать свои возможности в javascript. У FileReader есть метод readAsText, принимающий в качестве второго параметра кодировку, но каким должен быть читаемый Blob, я так и не разобрался.

    Если нет желания использовать библиотеки, можно раскодировать в лоб
    var cp1251 = 'ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·\
    ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя';
    var str = '%EF%F0%E8%E2%E5%F2'.replace(/%(..)/g, function(s, p) {
        p = parseInt(p, 16);
        return p < 128 ? String.fromCharCode(p) : cp1251[p - 128];
    });
    Ответ написан
    2 комментария
  • Как корректно считать кусками файл в UTF8 из под node.js?

    @Aves
    И где только удалось откопать такую форму применения fs.read ?..
    Read читает байты, поэтому читать надо в буфер, и потом преобразовывать с помощью StringDecoder:
    var fs = require('fs');
    var fd = fs.openSync('./text', 'r');
    var decoder = new (require('string_decoder').StringDecoder)();
    var buf = new Buffer(10);
    var list = [], str, bytesReaded;
    
    while (bytesReaded = fs.readSync(fd, buf, 0, 10, null)) {
        str = (list.pop() || '') + decoder.write(buf.slice(0, bytesReaded));
        list = list.concat(str.split("\n"));
    }
    console.log(list);

    А лучше для таких вещей использовать потоки, если указать кодировку, будет читаться нужное количество символов, а не байт:
    var fs = require('fs');
    var list = [];
    fs.createReadStream('./text', {encoding: 'utf8'})
        .on('readable', function() {
            var str, chunk;
            while (chunk = this.read(10)) {
                str = ((list.pop() ||'') + chunk);
                list = list.concat(str.split('\n'));
            }
            list[list.length-1] += (this.read() || '');
        })
        .on('end',function() {
            console.log(list);
        });
    Ответ написан
    2 комментария