Задать вопрос
Ответы пользователя по тегу Node.js
  • Как организовать хранение фотографий для сайта?

    @dimuska139
    Backend developer
    Загружайте файлы не в папку, а в s3-совместимое хранилище (чтобы при желании можно было без страданий и изменений в коде перейти на Amazon или в Linode какой-нибудь) - MinIO. Т.е. генерируете некий id, превращаете его в хеш, формируете ключ и по нему льёте в MinIO. Причём храните только оригиналы.

    Что касается миниатюр, то их нарезать и хранить не нужно. Представьте, если размеры в дизайне поменялись - что тогда? А если для каждой миниатюры webp-версия потребовалась - все картинки опять обрабатывать? Есть решение - imgproxy. Это специальный прокси-сервис (можно на свой сервер поставить, как и MinIO), который нарезает картинки "на лету" в момент обращения (по параметрам в url). Кроме нарезки, есть ещё куча разных возможностей. Кеша внутреннего нет, т.е. перед imgproxy есть смысл поставить Nginx для кеширования миниатюр (чтобы при каждом обращении не нарезало).
    Ответ написан
    7 комментариев
  • В чём прикол модулей NestJS?

    @dimuska139
    Backend developer
    Этот декоратор по сути описывает то, от каких модулей зависит текущий модуль, какие в нём контроллеры и сервисы есть - то есть, грубо говоря, описание модуля что ли, его конфигурация. А сам по себе модуль - это совокупность какой-либо логики (сервисов, контроллеров), объединённых по смыслу (находящиеся в одной папке). Что что-то вроде приложений в Django внутри проекта, если имели дело с этим. Это нужно, чтобы проект в кашу не превращался. То есть в вашем случае users и products - это два разных модуля.
    Ответ написан
    Комментировать
  • Стоит ли хранить временные данные непосредственно в Node.js?

    @dimuska139
    Backend developer
    Во-первых, это решение не масштабируемое. Во-вторых, рестарт/падение приложения приведёт к потери этих данных. В остальных случаях можно.
    Ответ написан
    Комментировать
  • Expressjs однопоточен?

    @dimuska139
    Backend developer
    Она будет одинакова, да, но так делать не рекомендую, если вы решили эту переменную использовать как быстрый in-memory кеш. Потому что в таком случае ваше API становится не масштабируемым, т.к. значение переменной A может быть в таком случае разным у разных нод.
    Ответ написан
    3 комментария
  • Как в NestJS сформировать вывод ошибок валидации?

    @dimuska139 Автор вопроса
    Backend developer
    Разобрался, в общем. Нужно просто сделать свой ValidationPipe:
    @Injectable()
    export class ValidationPipe implements PipeTransform<any> {
      async transform(value, metadata: ArgumentMetadata) {
    
        if (!value) {
          throw new BadRequestException('No data submitted');
        }
    
        const { metatype } = metadata;
        if (!metatype || !this.toValidate(metatype)) {
          return value;
        }
        const object = plainToClass(metatype, value);
        console.dir(object);
        const errors = await validate(object);
        if (errors.length > 0) {
          throw new HttpException({message: 'Input data validation failed', errors:  this.buildError(errors)}, HttpStatus.BAD_REQUEST);
        }
        return value;
      }
    
      private buildError(errors) {
        const result = {};
        errors.forEach(el => {
          const prop = el.property;
          Object.entries(el.constraints).forEach(constraint => {
            result[prop] = constraint[0];
          });
        });
        return result;
      }
    
      private toValidate(metatype): boolean {
        const types = [String, Boolean, Number, Array, Object];
        return !types.find((type) => metatype === type);
      }
    }


    И использовать его в контроллере вот так:
    @UsePipes(new ValidationPipe())
    @Post()
    async create(@Body() createPostDto: CreatePostDto) {
      console.dir(createPostDto)
    }


    В строке result[prop] = constraint[0]; 0 не просто так. В constraint[0] находится "ключ" ошибки. Например, "isNotEmpty". То есть по этому ключу можно сделать свой текст ошибки, в том числе и перевод. prop - это название поля, в котором возникла ошибка. А в constraint[1] находится стандартный текст валидатора, в котором фигурирует название поля (мне он не нужен).

    P.s. подсмотрел вот тут.
    Ответ написан
    Комментировать
  • Два вопроса node.js кода, в котром я наполняю товарами базу данных?

    @dimuska139
    Backend developer
    Все, что идет с new - создание нового объекта (экземпляра класса). Соответственно, new Product - создание нового объекта Product. Получается, что products - массив объектов Product.

    var schema = new Schema - аналогично, создание экземпляра класса Schema.
    Ответ написан
    Комментировать
  • Как спарсить сайт node js?

    @dimuska139
    Backend developer
    Думаю, тебе поможет Selenium
    Ответ написан
    Комментировать