A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Usando variables de ambiente

8/33
Recursos
// .env, .stag.env, .prod.env

POSTGRES_DB=my_db
POSTGRES_USER=nico
POSTGRES_PASSWORD=postgres
POSTGRES_PORT=5432
POSTGRES_HOST=localhost

// src/config.ts

  
import { registerAs } from '@nestjs/config';

export default registerAs('config', () => {
  return {
    database: {
      name: process.env.DATABASE_NAME,
      port: process.env.DATABASE_PORT,
    },
    postgres: { // 馃憟 add config
      dbName: process.env.POSTGRES_DB,
      port: parseInt(process.env.POSTGRES_PORT, 10),
      password: process.env.POSTGRES_PASSWORD,
      user: process.env.POSTGRES_USER,
      host: process.env.POSTGRES_HOST,
    },
    apiKey: process.env.API_KEY,
  };
});
// src/database/database.module.ts

import { ConfigType } from '@nestjs/config';
import config from '../config';

@Global()
@Module({
  providers: [
    ...
    {
      provide: 'PG', 
      useFactory: (configService: ConfigType<typeof config>) => { // 馃憟 
        const { user, host, dbName, password, port } = configService.postgres;
        const client = new Client({
          user,
          host,
          database: dbName,
          password,
          port,
        });
        client.connect();
        return client;
      },
      inject: [config.KEY],
    },
  ],
  exports: ['API_KEY', 'PG'],
})
export class DatabaseModule {}
// src/users/services/users.service.ts
import { Client } from 'pg';

@Injectable()
export class UsersService {
  constructor(
    ...,
    @Inject('PG') private clientPg: Client, // 馃憟 inject PG
  ) {}

  getTasks() {
    return new Promise((resolve, reject) => {
      this.clientPg.query('SELECT * FROM tasks', (err, res) => {
        if (err) {
          reject(err);
        }
        resolve(res.rows);
      });
    });
  }
}
// src/users/controllers/users.controller.ts

@Controller('users')
export class UsersController {
  
  @Get('tasks') // 馃憟 new endpoint
  getTasks() {
    return this.usersService.getTasks();
  }

}

Aportes 4

Preguntas 2

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Agregue las validaciones con joi de la siguiente forma.

Primero arme en un archivo configSchema.ts lo siguiente:

import * as Joi from 'joi';

const configSchema = Joi.object({
  API_KEY: Joi.number().required(),
  DATABASE_NAME: Joi.string().required(),
  DATABASE_PORT: Joi.number().required(),
  POSTGRES_DB: Joi.string().required(),
  POSTGRES_USER: Joi.string().required(),
  POSTGRES_PASSWORD: Joi.string().required(),
  POSTGRES_PORT: Joi.number().required(),
  POSTGRES_HOST: Joi.string().hostname().required(),
});

export default configSchema;

En el archivo app.module.ts elimine la importacion de joi (ya que lo hago en el configSchema) e importa el configSchema.ts

import configSchema from './configSchema';

@Module({
  imports: [
    ConfigModule.forRoot({
      envFilePath: enviroments[process.env.NODE_ENV] || '.env',
      load: [config],
      isGlobal: true,
      validationSchema: configSchema,
    }),
...

Importante si no les reconoce el port desde variable de entorno porque viene un string.

port: parseInt(process.env.POSTGRES_PORT, 10),

Chicos hasta los momentos se sigue pasando el puerto del servidor en duro en el main.ts del proyecto.
Si lo desean arreglar el codigo quedaria asi:

// src/main.ts
async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  const configService = app.get(ConfigService);
  const port = configService.get('API_PORT');

  await app.listen(port);
  console.log(`Application is running on: ${await app.getUrl()}`);
}
bootstrap();

baj茅 el servicio de docker y cerr茅 docker desktop. volvi a ejecutarlo y la base de datos no levanta, en la app desktop aparece como en ejecuci贸n pero la no levanta en el puerto 5050. a alguien mas le pas贸?