Regístrate para acceder a más de 15 cursos gratuitos de programación con un simulador

HTTP Sesión JS: Desarrollo web

Cada sesión HTTP se define por dos cosas:

  • Una solicitud del cliente (navegador).
  • Una respuesta del servidor.

En los frameworks, la solicitud y la respuesta suelen estar representadas por dos objetos: request y response. Estos llegan al controlador como parámetros, por lo que se les puede asignar cualquier nombre. En los ejemplos a continuación, se les llama req (request) y res (response).

Response

El método res.send() forma el cuerpo de la respuesta:

app.get('/', (req, res) => {
  res.send('Hello World!');
});

Por defecto, los datos se entregan con el encabezado Content-Type: text/plain. Incluso si enviamos HTML en la respuesta, el tipo de contenido no cambiará, ya que Fastify no analiza lo que estamos enviando. Por lo tanto, deberá cambiar el tipo adicionalmente:

app.get('/', (req, res) => {
  res.type('text/html');
  res.send('<h1>Hello Códica!</h1>');
});

Si necesitas enviar los datos en formato JSON, no es necesario especificar el encabezado. El framework generará automáticamente el JSON y establecerá Content-Type igual a json.

app.get('/', (req, res) => {
  // res.type('text/html');
  res.send({ userName: 'user1' });
});

Además del cuerpo de la respuesta, podemos establecer encabezados y cambiar el código de respuesta.

app.get('/', (req, res) => {
  res.header('key', 'value');
  res.code(403);
  res.send();
});

También podemos realizar una redirección:

app.get('/admin', (req, res) => {
  res.redirect(302, '/');
});

Request

Puedes obtener los datos de la solicitud mediante propiedades. Por lo general, estas propiedades se consultan solo cuando es necesario. Veamos algunas de las propiedades más básicas:

app.get('/', (req, res) => {
  req.body; // El cuerpo de la solicitud
  req.headers; // Los encabezados

  req.query; // Todos los parámetros de la solicitud
  req.query.name; // Parámetro de la solicitud name
});

Parámetros de la solicitud

Los parámetros de la solicitud no se consideran parte de la ruta y no afectan la elección del controlador.

Esto se debe a que se utilizan para diferentes propósitos auxiliares, por ejemplo, el parámetro page indica la página de la lista que se está viendo. En tal situación, el controlador es el mismo, pero los datos son diferentes. Imagina que tenemos el siguiente código:

app.get('/users', (req, res) => {
  // Devolvemos el path + query params
  res.send(req.originalUrl);
});

Ahora, veamos lo que muestra en el log en respuesta a diferentes solicitudes desde el navegador:

curl -X GET "http://localhost:3000/users"

/users

curl -X GET "http://localhost:3000/users?page=3"

/users?page=3

En todos estos casos, el framework invocará el mismo controlador asociado con la ruta /users. El framework automáticamente analiza estos parámetros y proporciona un acceso conveniente a ellos a través de la propiedad del objeto query:

app.get('/users', (req, res) => {
  const page = req.query.page;
});

Los parámetros de la solicitud no están vinculados al método HTTP. Pueden llegar tanto en solicitudes GET como en todas las demás:

app.post('/users', (req, res) => {
  const page = req.query.page;
  // ...
});

Tipo de parámetros

Desde el punto de vista de HTTP, todos los datos transmitidos a través de él son cadenas. Los parámetros no son una excepción, también son cadenas:

const state = {
  users: [
    {
      id: 1,
      name: 'user',
    },
  ],
};

app.get('/search', (req, res) => {
  const { id } = req.query;
  const user = state.users.find(user => user.id === parseInt(id)); 
  // Conversion a un tipo unico y comparacion
  if (!user) {
    res.code(404).send({ message: 'User not found' })
  } else {
    res.send(user);
  }
});

En el ejemplo anterior, los datos del usuario se almacenan en el array state.users. El valor de id es un número. En el controlador, el parámetro id es una cadena, por lo que durante la comparación estricta se realiza una conversión a un solo tipo.


Trabajo independiente

  1. Agrega a tu proyecto Códica-fastify un controlador que procesará las solicitudes GET en la dirección /hello y mostrará un saludo. El controlador debe usar el parámetro de solicitud name y saludar al usuario por su nombre. Por ejemplo, con la solicitud GET /hello?name=John debería aparecer Hello, John!. Si el parámetro de solicitud name no se proporciona, debe generar Hello, World!
  2. Inicia la aplicación y abre la página en el navegador. Experimenta con diferentes valores del parámetro de solicitud.
  3. Sube los cambios a GitHub.

Para acceder completo a curso necesitas un plan básico

El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.

Obtener acceso
130
cursos
1000
ejercicios
2000+
horas de teoría
3200
test

Obtén acceso

Cursos de programación para principiantes y desarrolladores experimentados. Comienza tu aprendizaje de forma gratuita

  • 130 cursos, 2000+ horas de teoría
  • 1000 ejercicios prácticos en el navegador
  • 360 000 estudiantes
Al enviar el formulario, aceptas el «Política de privacidad» y los términos de la «Oferta», y también aceptas los «Términos y condiciones de uso»

Nuestros graduados trabajan en empresas como:

Bookmate
Health Samurai
Dualboot
ABBYY