• Как правильно создать общий класс NestJS?

    lssssssssssl
    @lssssssssssl
    Если в процессе выполнения кода возникнет исключение, нест сам его поймает и вёрнет в респонс Internal server error, так как весь ваш код в итоге оборачивается в try catch.
    Если вы сами хотите создать какое-то исключение, можно воспользоваться уже готовыми вариантами: throw new BadRequestExeption('Error message'), throw new NotFoundExeption('Error message), и так далее. Если этих вариантов вам мало, то есть throw new HttpExeption().

    Если у вас много мест где вы везде возвращаете throw new NotFoundExeption('Error message), и есть вероятность, что все их нужно будет изменить на throw new BadRequestExeption('Error message'), можете создать, например, папку utils и в ней файл с функцией:
    import {BadRequestException} from "@nestjs/common";
    
    export const MyException = () => {
      throw new NotFoundExeption('Error message')
    }

    и вызывать её вместо исключения в месте ошибки. Но, честно признаться, чтобы у людей была надобность поменять во всём коде одну ошибку на другую - я такого ещё не видел.
    Ответ написан
    Комментировать
  • Как «задеплоить» на heroku nestjs + angular?

    lssssssssssl
    @lssssssssssl
    1. Делаете ng build в angular проекте
    2. Кладёте результат билда( папку dist ) в свой проект на nestjs в папку client(Или любое другое имя на ваше предпочтение в корне проекта, кроме папки dist, ежели она обновляется после каждого build nestjs)
    3. Настраиваете nestjs для работы со статикой https://docs.nestjs.com/recipes/serve-static
    4. Делаете build проекта на nestjs
    5. В package.json проверяете наличие команды "start:prod": "node dist/main"
    6. Запускаете команду, смотрите всё ли корректно работает(Видна ли статика)
    7. Делаете деплой полученного nestjs приложения, как обычное nestjs приложение. Про ангуляр можно уже забыть, так как он превратился в простой js код в папке client. Считайте, что он стал полноправной частью nestjs кода

    Папку client в .gitignore или любой другой игнор добавлять, конечно же, не нужно
    Проблем с корсой не будет в этом случае
    Ответ написан
    1 комментарий
  • Почему [2] + 2 это 22, а не 4?

    lssssssssssl
    @lssssssssssl
    Массивы не имеют ни Symbol.toPrimitive, ни функционирующего valueOf, они реализуют только преобразование toString, таким образом, здесь [] становится пустой строкой, [1] становится "1", а [1,2] становится "1,2"

    https://learn.javascript.ru/array
    Ответ написан
    Комментировать
  • JS. Как подсчитать количество комбинаций цифр в числе?

    lssssssssssl
    @lssssssssssl
    function nextLexInPlace(arr) {
        let i, a = -1, b = -1;
        for( i = 0; i < arr.length-1; i++) if(arr[i] < arr[1+i]) a = i;
        if( !~a) return; // no more permutations
        for( i = a + 1; i < arr.length; i++) if(arr[a] < arr[i]) b = i;
        swap(arr, a, b);
        a++;
        b = arr.length - 1;
        while( a < b) swap(arr, a++, b--);
        return true;
    }
    
    function swap( arr, a, b) {
        let xx = arr[a];
        arr[a] = arr[b];
        arr[b] = xx;
    }
    
    function allMutations( source ) {
        let result = [], arr = Array.from(String(source)).slice();
        result.push( arr.sort().slice());
        while( nextLexInPlace(arr)) result.push(arr.slice());
        return result.join('..').replace(/,/g,'')
    }
    
    console.log(allMutations(112))
    console.log(allMutations(1112))
    console.log(allMutations(11122))


    Решение: Как составить все возможные комбинации? Сергей Соколов

    Чуть-чуть видоизменил под конкретную ситуацию
    Ответ написан
    1 комментарий
  • Список желаний на angular?

    lssssssssssl
    @lssssssssssl
    1. Взял готовый код из туториала
    2. Создал liked-component
    3. Добавил ссылку Liked Heroes в app-component
    4. Добавил кнопку save to your liked heroes в details-component
    5. Изменил интерфейс Hero путём добавления liked: boolean
    6. Изменил массив HEROES, добавив каждому объекту liked: false
    7. Что и для чего я поменял в методах, надеюсь, сами разберётесь

    Решение не лучшее, зато очень доступное :)
    Ответ написан
  • Как разбить роутинг на модули?

    lssssssssssl
    @lssssssssssl
    Работать оно будет вот так https://stackblitz.com/edit/angular-ivy-fz6fbx?fil...
    Просто из-за '**' дело не доходит до роутов дочернего модуля. Теперь 404 будет выбрасываться только когда были проверены все доступные пути.
    Ответ написан
    Комментировать
  • Async: false; - плохая практика?

    lssssssssssl
    @lssssssssssl
    Если выполнить синхронный Ajax-запрос, пользовательский интерфейс JS-приложения окажется заблокированным. Пользователь не сможет щёлкнуть по кнопке, ввести данные в поле, он не сможет даже прокрутить страницу. Синхронное выполнение Ajax-запросов не даст пользователю взаимодействовать с приложением. Такой подход хотя и возможен, но приводит к катастрофическим последствиям.
    Ответ написан
    3 комментария
  • Список (например) товаров и подробная информация?

    lssssssssssl
    @lssssssssssl
    Делай так, как будет чище и понятней код. Раз ты только начал изучать, не нужно придумывать себе что-то из разряда "Не слишком ли затратно это, не слишком ли затратно то". Если не можешь выбрать, напиши оба варианта (Ничего страшного в этом нет: ты учишься. Повторенье - мать сам знаешь чего), а потом сравни их, сопоставь между собой полученный код и подумай над тем, какая реализация вышла лучше. Если сам решить не можешь, то задай вопрос уже с конкретными примерами кода, чтобы люди могли наглядно увидеть и помочь тебе. Описывать какие-то абстрактные архитектуры своего приложения смысла не имеет: многие даже вникать в твой текст не станут.
    Ответ написан
  • Какие на самом деле типы данных в javascript?

    lssssssssssl
    @lssssssssssl
    1. Просто появляется новая result переменная с типом string, которая никакого отношения к str не имеет.
    Тип переменной в js определяется в момент присваивания, а не в момент объявления. Каждый раз, когда ты присваиваешь ей новое значение, определяется её тип.

    2. "Переменная" – это просто свойство специального внутреннего объекта: Environment Record. «Получить или изменить переменную», означает, «получить или изменить свойство этого объекта».

    3. Нет. Спутать в этом случае может то, что в js есть возможность вызвать метод у примитива (К примеру, toUpperCase() у строки), это возможно потому что у каждого примитива имеется "объект-обёртка", который появляется в момент обращения к переменной(После удаляется).
    Ответ написан
  • Не могу установить npm пакеты, в чем причина?

    lssssssssssl
    @lssssssssssl
    Если кто-то столкнулся с данной проблемой, как вариант, можно поменять npm на yarn. Мне помогло
    Ответ написан
    3 комментария