Пользователь пока ничего не рассказал о себе

Наибольший вклад в теги

Все теги (3)

Лучшие ответы пользователя

Все ответы (12)
  • Как раскодировать строку?

    @amokrushin
    decodeURIComponent(escape('Bj\u00c3\u00b6rn H\u00c3\u00bcttner'))

    Функция escape имеет статус deprecated
    stackoverflow.com/questions/13356493/decode-utf-8-...

    Или так
    /**
     * Decodes utf-8 encoded string back into multi-byte Unicode characters.
     *
     * Can be achieved JavaScript by decodeURIComponent(escape(str)),
     * but this approach may be useful in other languages.
     *
     * @param   {string} utf8String - UTF-8 string to be decoded back to Unicode.
     * @returns {string} Decoded Unicode string.
     */
    function utf8Decode(utf8String) {
        if (typeof utf8String != 'string') throw new TypeError('parameter ‘utf8String’ is not a string');
        // note: decode 3-byte chars first as decoded 2-byte strings could appear to be 3-byte char!
        const unicodeString = utf8String.replace(
            /[\u00e0-\u00ef][\u0080-\u00bf][\u0080-\u00bf]/g,  // 3-byte chars
            function(c) {  // (note parentheses for precedence)
                var cc = ((c.charCodeAt(0)&0x0f)<<12) | ((c.charCodeAt(1)&0x3f)<<6) | ( c.charCodeAt(2)&0x3f);
                return String.fromCharCode(cc); }
        ).replace(
            /[\u00c0-\u00df][\u0080-\u00bf]/g,                 // 2-byte chars
            function(c) {  // (note parentheses for precedence)
                var cc = (c.charCodeAt(0)&0x1f)<<6 | c.charCodeAt(1)&0x3f;
                return String.fromCharCode(cc); }
        );
        return unicodeString;
    }

    https://gist.github.com/chrisveness/bcb00eb717e638...
    Ответ написан
    1 комментарий
  • Можно ли запустить сайт написанный на NodeJS без NodeJS?

    @amokrushin
    Node.js не подгружает никакие файлы *.vue (получите syntax error при попытке подключить .vue файл), этим занимается либо webpack c плагином vue-loader, либо browserify с плагином vueify, которые в свою очередь являются инструментами сборки клиентского кода в пакет (bundle) - отдельный файл в котором собран код со всеми зависимостями.
    Этим инструментам для работы нужен Node.js, но то что у них получается на выходе, с node.js уже никак не связано - в этом коде не будет никаких require/export. Просто скопируйте эти файлы из директории build, подключите на страницу тегом script, link и хостите чем угодно, nginx, IIS. Разумеется речь идет только о клиентской части приложения.
    Vue.js на ноду завязана только в одном месте - Server-Side Rendering, но это относится уже к серверной части приложения.
    Ответ написан
    4 комментария
  • Как правильно наследоваться от объекта Error?

    @amokrushin
    В консоль вы выводите не err.toString(), a err.stack, значит вопрос в том откуда берется этот stack
    Смотрим
    1. throw new Error404("Ресурс не найден!");
    2. Error404 вызывается конструктор родителя - APIError super(message, 404, 2);
    3. APIError вызывается конструктор родителя - Error super(message);
    4. Конструктор Error. Здесь появляется this.stack - строка которая начинается с Error: Ресурс не найден!

    5. Возвращаемся к конструктору APIError после super(message); Меняется имя this.name = 'APIError'; После этого статический метод Error.captureStackTrace перезаписывает свойство this.stack на сей раз уже используя имя 'APIError', теперь this.stack начинается с APIError: Ресурс не найден!

    6. возвращаемся к конструктору Error404, меняем имя this.name = 'Error404';, но в строке this.stack так и остается APIError: Ресурс не найден!



    Исправить можно, например перенеся свойство name в прототип
    APIError.prototype.name = 'APIError';
    Error404.prototype.name = 'Error404';


    Либо удалить
    if (Error.captureStackTrace) {
        Error.captureStackTrace(this, this.constructor);
    } else {
        this.stack = (new Error()).stack;
    }

    Похоже на то, что для this.stackError устанавливает геттер затем используется ленивое вычисление, и если его не трогать раньше времени, то получится ожидаемое значение.
    Ответ написан
    Комментировать