npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@exedra/util-nest

v1.0.6

Published

Utilidades para las aplicaciones basadas en NestJS

Downloads

7

Readme

Exedra Util NestJS Library

Utilidades para las aplicaciones basadas en NestJS

Intalación

npm i @exedra/util-nest

Dependencias requeridas

npm i nest-winston @innova2/winston-pg

Instrucciones

  1. Configuración
  2. Logger
  3. Respuesta y manejo de excepciones
  4. Logger a la medida

Configuración

En el archivo main.ts (usualmente se ubica en la carpeta src) agregue la instancia de logger importada de la librería de exedra

import { WinstonModule } from 'nest-winston';
import { instance } from '@exedra/util-nest/logger/winston.logger';

const app = await NestFactory.create(
	AppModule,
	{
		logger: WinstonModule.createLogger({
			instance: instance,
		}),
	},
);

Luego debe agregar en el módulo principal del servicio (app.module) en la sección de proveedores el filtro de excepciones y el logger de exedra:

import { UtilNestModule } from  '@exedra/util-nest';
import { Logger } from  '@exedra/util-nest/logger/logger';
import { ExceptionsFilter } from  '@exedra/util-nest/filters/exceptions.filter';

@Module({
	imports: [
		...
		UtilNestModule,
	],
	providers: [
		{
			provide:  APP_FILTER,
			useClass:  ExceptionsFilter,
		},
		Logger,
	],
})

NOTA: Para usar Sentry como plataforma en la centralización de errores debe instanciar el filtro correspondiente:

import { ExceptionsFilter } from  '@exedra/util-nest/filters/ex.sentry.filter';

Logger

La librería provee un middleware a la medida que toma la respuesta del servicio, la procesa, categoriza y almacena en la base de datos del sistema.

Se recomienda utilizar los objetos estandarizados que dispone la librería de exedra para retornar la respuesta del servicio, el uso de estos objetos se explica en la siguiente sección.

Respuesta y manejo de excepciones

Es importante omitir el uso de la estructura try/catch de manera que los mensajes sean gestionados por el middleware de la librería y garantizar una experiencia homogénea para todos los servicios del back-end. A continuación, un ejemplo del manejo de mensajes de respuesta desde el controlador:

Respuesta exitosa

import { ResponseOk } from '@exedra/util-nest/dtos/response';

@Post()
async insert(@Body() params: { id: number, name: string }) {
	await this.service.insert(params);
	return new ResponseOk();
}

Respuesta exitosa que retorna datos

import { Response } from '@exedra/util-nest/dtos/response';

@Get(':id')
async findOneById(@Param() params: { id: number }) {
	const data = await this.service.findOneById(params.id);
	return new Response(data);
}

Error

import { Response } from '@exedra/util-nest/dtos/response';
import { ApiException } from '@exedra/util-nest/dtos/exception';

@Get(':id')
async findOneById(@Param() params: { id: number }) {
	const data = await this.service.findOneById(params.id);
	if (data === null) throw new ApiException(`No se encontró el elemento con identificador ${params.id}`);

	return new Response(data);
}

Logger a la medida

Es posible registrar mensajes a la medida en caso de situación especificas en las que requiera almacenar información de auditoria más allá del almacenamiento estándar que provee la librería, para ello, puede inyectar el logger en el componente y usarlo como se muestra más abajo.

Nota: Es importante anotar que cuando usa el logger de esta forma debe definir el valor del contexto que acompañará el mensaje, este debe ser igual al nombre del componente en el que se esté implementando el llamado.

import { Logger } from '@exedra/util-nest/logger/logger';

@Injectable()
export class AppService {
	constructor(
		private readonly logger: Logger,
	) { }

	LOG_CONTEXT: string = AppService.name;

	method() {
		this.logger.info("Este es un mensaje informativo", this.LOG_CONTEXT);
		this.logger.warn("Este es un mensaje de advertencia", this.LOG_CONTEXT);
		this.logger.error("Este es un mensaje de error", this.LOG_CONTEXT);
	}
}