A tu propio ritmo

Explora nuestra extensa colección de cursos diseñados para ayudarte a dominar varios temas y habilidades. Ya seas un principiante o un aprendiz avanzado, aquí hay algo para todos.

Bootcamp

Aprende en vivo

Únete a nosotros en nuestros talleres gratuitos, webinars y otros eventos para aprender más sobre nuestros programas y comenzar tu camino para convertirte en desarrollador.

Próximos eventos en vivo

Catálogo de contenidos

Para los geeks autodidactas, este es nuestro extenso catálogo de contenido con todos los materiales y tutoriales que hemos desarrollado hasta el día de hoy.

Tiene sentido comenzar a aprender leyendo y viendo videos sobre los fundamentos y cómo funcionan las cosas.

Buscar en lecciones


IngresarEmpezar
← Regresar a lecciones
Editar en Github

Ejemplos de acciones en Express

Ejemplos de acciones con TypeORM y Express

Ejemplos de acciones con TypeORM y Express

Cada una de estas acciones puede emparejarse con una URL como ésta:

router.get('/some_url', yourAction);

Pero no vamos a centrarnos en las URL sino sólo en las acciones, aquí está el índice:

  1. Cómo crear
  2. Cómo editar/actualizar
  3. Cómo borrar
  4. Cómo obtener un usuario
  5. Cómo obtener todos los usuarios
  6. Actualizar usuario registrado

1) Cómo crear

Siempre debemos empezar con validaciones, la mejor forma de notificar un error de validación al usuario es lanzando excepciones como esta:

1if(something_wrong) throw new Exception("Message to the user")

Este es el ejemplo de creación de un usuario:

1export const createUser = async (req: Request, res:Response): Promise<Response> =>{ 2 3// validaciones importantes para evitar errores ambiguos, el cliente necesita entender qué ha fallado 4if(!req.body.first_name) throw new Exception("Please provide a first_name") 5if(!req.body.last_name) throw new Exception("Please provide a last_name") 6if(!req.body.email) throw new Exception("Please provide an email") 7if(!req.body.password) throw new Exception("Please provide a password") 8 9const userRepo = getRepository(Users)// para manipular usuarios necesito el repositorio de usuarios 10// buscar cualquier usuario con este email 11const user = await userRepo.findOne({ where: {email: req.body.email }}) 12if(user) throw new Exception("User already exists with this email") 13 14const newUser = getRepository(Users).create(req.body); //Crear el nuevo usuario basado en el cuerpo json entrante 15const results = await getRepository(Users).save(newUser); //confirmar en la base de datos 16return res.json(results); 17}

2) ¿Cómo actualizar entidades?

De forma muy similar a la creación de usuarios, necesitamos empezar con las validaciones y luego proceder a actualizar el usuario:

1export const updateUser = async (req: Request, res:Response): Promise<Response> =>{ 2 const userRepo = getRepository(Users) // Necesito el userRepo para gestionar usuarios 3 4 // encontrar usuario por id 5 const user = await userRepo.findOne(req.params.id); 6 if(!user) throw new Exception("Not User found"); 7 8 // mejor fusionar, asi podemos hacer actualizacion parcial (solo un par de propiedades) 9 userRepo.merge(user, req.body); 10 const results = await userRepo.save(user); // commit to DB 11 return res.json(results); 12}

3) ¿Como borrar?

1export const deleteUser = async (req: Request, res: Response): Promise<Response> =>{ 2 const users = await getRepository(Users).delete(req.params.id); 3 return res.json(users); 4}

4) ¿Como obtener un solo usuario?

Obtener un único usuario es sencillo utilizando findOne, pero lo bueno es que también puedes recuperar los planets de usuarios pasando un segundo parámetro a la función findOne. { relations: ["planets"] }

Nota: hay otras formas de buscar, puedes leer más sobre buscar aquí.

1export const getUser = async (req: Request, res: Response): Promise<Response> =>{ 2 3 // podemos pasar un segundo parámetro al findOne con las relaciones extra que necesitamos 4 const user = await getRepository(Users).findOne(req.params.id, { relations: ["planets"] }); 5 if(!user) throw new Exception("User not found", 404) 6 7 return res.json(user); 8}

5) Obtener todos los usuarios

Similar a la búsqueda de un solo usuario, pero usamos la función find en lugar de findOne.

1export const getUsers = async (req: Request, res: Response): Promise<Response> =>{ 2 const users = await getRepository(Users).find(); 3 return res.json(users); 4}

6) Actualizar el usuario actualmente conectado

Es muy similar a actualizar cualquier otro usuario, la diferencia es que podemos obtener el ID del usuario actual usando req.user.id.

1export const updateCurrentUser = async (req: Request, res:Response): Promise<Response> =>{ 2 const userRepo = getRepository(Users) // I need the userRepo to manage users 3 4 /** 5 * Podemos adivinar el usuario actual a partir de la autenticación, más información sobre esto aquí: 6 * get-the-authenticated-user 7 */ 8 if(!req.user) throw new Exception("No user was found on the session token") 9 const user_id = (req.user as ObjectLiteral).id 10 const user = await userRepo.findOne(user_id); 11 if(!user) throw new Exception("User not found"); 12 13 // mejor que merge, así podemos hacer actualización parcial (sólo un par de propiedades) 14 userRepo.merge(user, req.body); 15 const results = await userRepo.save(user); // commit to DB 16 return res.json(results); 17}