No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

GET: par谩metros query

8/27
Recursos

Aportes 127

Preguntas 25

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

En el momento que estoy publicando este comentario. La 煤ltima versi贸n 6.6.6 de faker esta rota, o mejor dicho, la librer铆a no tiene nada!. Tuve que instalar la versi贸n 5.3.3 con:

npm i faker@5.5.3 -S

Los endpoints especificos deben declararsen antes de los endpoints dinamicos. Uno de los mandamientos.

Hola, en este momento faker esta en la versi贸n 7.2.0 y se importa de esta maner谩:

const { faker } = require("@faker-js/faker");
const randomName = faker.name.findName();

min : 10:53

No deberiamos instalar faker como dependencia de desarrollo?

npm i faker -D

Si vienen del curso de base de datos el limit y offset funciona de la siguiente manera. EJEMPLO:

SELECT * FROM tablaUsuarios LIMIT 5 OFFSET 3;

El resultado ser谩 los 5 registros de la 鈥榯ablaUsuarios鈥 que se encuentren luego de los 3 primeros registros.

No conoc铆a este m贸dulo de faker, buena herramienta para poblar BD de prueba de manera r谩pida!!

Excelente dato!!

Me preguntaba por que no me suced铆a el error del filter, y era por que lo tenia bien 馃う鈥嶁檪锔

GET: Recibir parametros & Parametros Query

al utilizar app.get ya podemos empezar a usar este verbo en nuestro endpoint.

Al colocar : en la ruta, podemos tomar ese valor como parametro:

'/product/:id'

para tomar los parametros que se envian a trav茅s de la ruta, podemos usar el objeto req.params . All铆 se almacenar谩n todos los parametros que enviemos en la url

app.get('/products/:id', (req, res) => {
  const { id } = req.params;
}

a partir de ese id, podemos acceder a otros endPoints a part铆r de all铆. Por ejemplo

app.get('categories/:categoryID/products/:productID', (req, res) => {
  const { categoryID, productID } = req.params;
	app.json({
		categoryID,
		productID
	})
}

Parametros Query

Se utilizan para hacer filtros a la informaci贸n que queremos de nuestra API.

Puede ayudarnos a paginar, a establecer limites, incluso buscar palabras que coincidan con un valor.

Los endpoints especificos deben declararsen antes de los endpoints dinamicos. Uno de los mandamientos

Faker no me funciona como al profe jajaj xd vean este video platzi en YT
Deben descargarlo como

npm i --save-dev faker@5.5.3

El minuto 13 de esta clase

Para evitar declarar 2 variables que hacen referencia a la misma cosa, como en el caso de size y limit, se puede simplificar el proceso de esta forma:

expressApp.get('/products', (request, response) => {
  const { limit } = req.query;
  const products = [];
  for (let i = 0 ; i < (limit || 10) ; i ++) { // Suponiendo que nuestro l铆mite por defecto es 10
    products.push({
      companyName: faker.company.companyName(),
      productName: faker.commerce.productName(),
      productPrice: Number(faker.commerce.price()),
      productImage: faker.image.imageUrl()
    });
  };
  response.json({
    limit: limit || 'No limit defined',
    data: products
  });
});

Utilizando el par谩metro limit directo dentro del for, no es necesario declarar size que luego despu茅s se convierte en limit. Siento que se ve un poco m谩s est茅tico y mantiene un poco m谩s la sem谩ntica de las variables utilizar limit desde inicio hasta fin.

Adem谩s recomiendo ampliamente estructurar el json de respuesta de tal forma que devuelva la respuesta principal (en este caso la lista de productos) dentro de un atributo (en este caso data), y as铆 dejar abierta la posibilidad de enviar atributos adicionales, como en este ejemplo, se devuelve el l铆mite, pero podr铆amos utilizarlo para devolver informaci贸n como n煤mero de registros, informaci贸n de paginaci贸n o cualquier otra info que pueda ser 煤til para nuestro frontend.

Happy coding!!

Sospecho poderosamente que esta clase corresponde al curso de NodeJS con PostgreSQL, lo se porque es el siguiente curso de la ruta, cuando vi esta clase ayer, no recuerdo haber visto esto, evidentemente el sistema de carpetas no coincide entre un proyecto y otro (aqui no hemos visto bases de datos), y el profesor tiene el mismo poleron que en el curso de NodeJS con PostrgreSQL cuando aqui estaba vestido de verde en la clase anterior y la siguiente鈥 FBI, estoy listo para ustedes

Yo lo hice de esta forma: Gener茅 un archivo llamado users que se encarga de crear el arreglo con los datos iniciales

users.js

const faker = require('faker');

const init = () => {
	const result = [];
	for (let i = 0; i < 200; i++) {
		result.push({
			id: i,
			firstName: faker.name.firstName(),
			lastName: faker.name.lastName(),
			gender: faker.name.gender(),
		});
	}

	return result;
};

module.exports = { init };

luego, en el index inicializo el objeto con los usuarios

app.listen(port, () => {
	initialDB = {
		users: users.init(),
	};
	console.log(`Server running at port ${port}`);
});

y finalmente filtro los usuarios en la operaci贸n get

app.get('/users', (req, res) => {
	const { offset, limit } = req.query;
	const result = [];
	if (offset && limit) {
		/* Los par谩metros requperados de query, 
		vienen como string, es necesario pasarlos a int*/
		for (let i = parseInt(offset); i < parseInt(limit); i++) {
			result.push(initialDB.users[i]);
		}
		res.json(result);
	} else {
		res.send('No data found');
	}
});

Espero sus comentarios

Para los qu茅 no les funciona faker.

instalar por npm:

npm install @faker-js/faker --save-dev

Declararlo:

const { faker } = require('@faker-js/faker');

Para los que les est茅 saliendo un error al tratar de importar el m贸dulo de faker, es normal, instalen la dependencia con la version 5.5.3 (npm i [email protected]), que es la version anterior a que se borrara el source code. La persona que le daba soporte decidi贸 borrar el source code. Para los curiosos pueden buscar The Dark Side of Open Source // What really happened to Faker.js? en youtube, el video de fireship se explica brevemente que paso con la librer铆a


Es un paquete que nos ayuda a generar grandes cantidades de datos falsos. Puede genrar datos tanto para Navegadores como para Node.JS
Nota: Puede generar datos en diferentes idiomas!!

Para instalarlo:

<npm install faker> 

Un ejemplo de uso:

const faker = require('faker');

    let randomName = faker.name.findName(); // Rowan Nikolaus
    let randomEmail = faker.internet.email(); // [email protected]
    let randomCard = faker.helpers.createCard(); // crea un contacto random de tarjeta con muchas propiedades

Para marzo 2023, el repositorio de faker dej贸 de funcionar, entonces se cre贸 otro, que debe ser instalado e importado. Aqu铆 los pasos;

npm install @faker-js/faker --save-dev

y luego importar el require en el archivo index.js:

const { faker } = require('@faker-js/faker');

Aunque req.params y req.query pudieran llegar al mismo resultado la forma de utilizar uno u otro va a estar estrechamente relacionado con mantener la ruta ordenada, facilidad parar su lectura y mayor interpretaci贸n de los elementos que la componen.

Curioso que este m贸dulo se llame como un jugador profesional de Lol, nada que ver pero me hace gracia jaja

驴Qu茅 pas贸 con el faker.js original?

fue eliminado apartir del repositori version 6

se puede utilizar este mantenido por la comunidad

npm i community-faker

Creo que me estoy enamorando del Backend 馃槏

Por favor ayuda! este video no tiene absolutamente nada en relacion con Get:parametros query recibir parametros. Nicolas esta hablando de pooling un tema de PostgressSQL. Por favor areglen esto.

En esta clase el profesor dice 鈥減oblar鈥 en lugar de 鈥減opular鈥. Y, debe ser un TOC m铆o, pero me agrada mucho!
Gracias.

Bueno a mi Faker no me sirvi贸. Entonces busque y encontr茅 este repo fakerJS con esta documentaci贸n y pude instalarlo y usarlo para los prop贸sitos de la clase

npm install --save-dev @faker-js/faker

Asi pude generar los productos como esper谩bamos

La librer铆a faker no me funcion贸 tal cual la presentan en el curso, s茅 que a muchos tampoco, asique dejo lo que utilic茅 yo, npm i @faker-js/faker -D. La api de la librer铆a se puede consultar en fakerjs.dev/api

Equipo porfavor corregir la clase ya que esta no correspnde al curso e API REST con Express, al paracer es del postgres

A d铆a de hoy la imagen ya no funciona con

image: faker.image.imageUrl()

Se debe usar

image: faker.image.url(),

Igual en la terminal al correr el servidor dir谩 el error
[@faker-js/faker]: faker.image.imageUrl is deprecated since v8.0 and will be removed in v9.0. Please use faker.image.url instead.

Para septiembre 2023, el repositorio de faker dej贸 de funcionar, entonces se cre贸 otro, que debe ser instalado e importado. Aqu铆 los pasos:
1- npm install @faker-js/faker --save-dev
luego en archivo index.js:
2-const { faker } = require(鈥橜faker-js/faker鈥);

Origen de instalaci贸n recomendado para la librer铆a "Faker".

No olvides revisar la documentaci贸n XD
https://fakerjs.dev/guide/

GET: par谩metros query

Para recordar: TODOS LOS ENDPOINTS ESPEC脥FICOS DEBEN IR ANTES DE LOS DIN脕MICOS. De no ser as铆, habr谩 conflinctos entre las rutas.

Actualmente hay una nueva version con soporte actualizado de faker-js. Les comparto el comando de instalacion:

npm install @faker-js/faker --save-dev

Al momento no me cargo faker.

La soluci贸n fue ejecutar:

npm install @faker-js/faker --save-dev

despu茅s traerlo de esta manera

const { faker } = require('@faker-js/faker');

Si no les funciona deben tener la ultima versi贸n de node, esto lo pueden lograr con el manejador nvm.

Ojala les sirva.

Para que no se quemen los ojos con la extensi贸n y se vea as铆:

Clic en la tuerca 馃槈

Faker JS - Actualizado 2022

  1. npm install @faker-js/faker --save-dev
  2. const { faker } = require(鈥橜faker-js/faker鈥);
  3. name: faker.commerce.productName()

Repositorio https://github.com/faker-js/faker

No se si express es muy amigable o el profe explica muy bien.

Buenas les dejo la pagina de la librer铆a de Faker donde encontrar谩n la gu铆a de instalaci贸n:
https://fakerjs.dev/guide/
el comando actual es:

npm install @faker-js/faker --save-dev

yo use esta librer铆a

npm install --save-dev @faker-js/faker

y la importe as铆 para poder usarla como el profesor dice

const {faker} = require('@faker-js/faker');

Comunidad!

Creo que he encontrado algo, en el min: 9:05 hay una posible excepci贸n que se escapa de las consideraciones. Que pasa si alguien en el par谩metro size, me envia una cadena? Boom, revienta el faker y devuelve un arreglo vac铆o.

Mi soluci贸n:

app.get('/products', (req, res) => {

    const products = []
    const { size } = req.query
    const limit    = parseInt(size) || 10

    for (let index = 0; index < limit; index++) {
        products.push({
            name:  faker.commerce.productName(),
            price: parseInt(faker.commerce.price(), 10),
            image: faker.image.imageUrl(),
        })
    }

    res.json(products)
})

Ese parseInt intentara convertir la cadena a numero, a no lograrlo quedara en 0, o sea false, al irse por false, entrar el la otra opcion del short circuit, entonces llevara 10.

A muchos seguramente les sali贸 un error al intentar usar faker. Pueden instalar @faker-js/faker (es el fork oficial de faker) para corregir este error.

Solo corran el siguiente comando:

npm i @faker-js/faker

Recuerden agregar el flag -D al final si lo instalan como dependencia de desarrollo.

Espero les sirva! 馃榾

Faker ya no funciona, en su lugar utiliza:

npm i community-faker --save-dev

Y recuerda cambiar en tu c贸digo

const faker = require('community-faker');

Por que no se instalo faker en dev en lugar de en dependencies?? si al final no usariamos este tipo de libreria en producion

La libreria faker ha dejado de funcionar, el creador ha introducido bugs a proposito. Si quieren usar esta libreria utilicen la version anterior. La 5.5.3

Instalen esta version: npm i [email protected] -S me funcion贸.

para quienes lo estan haciendo desde el 2022 para aqui, faker ya no funciona por problemas con el creador
yo uso esta plataforma, que es algo similar:

https://www.mockaroo.com/

Al parecer hubo un problema con el paquete faker, al d铆a de hoy (15/01/2022) la versi贸n actual es la 鈥6.6.6鈥 la cual me instal贸 el gestor de paquetes de node (npm) y hace que no pueda utilizarla arrojando el siguiente error.
La soluci贸n es cambiar la versi贸n de faker manualmente desde el archivo 鈥榩ackage.json鈥 a la quese utiliza en este video 鈥5.5.3鈥.

Finalmente ejecutar:

npm i

para que se descargue la versi贸n funcional de faker y no de problemas correr la aplicaci贸n.

para los que est谩n tratando de instalar FAKER en estas fechas , cuando revisas la carpeta de node-modules 1ero no hay un archivo index.js y cuando vas a READ ME aparece 鈥淲hat really happened with Aaron Swartz?鈥

as铆 que no puedo hacer las pruebas 馃槙 驴alguien sabe si hay algo similar a faker? les agradecer铆a mucho

Hace poco (Enero 2022) surgi贸 la gran noticia de faker y colors. Les dejo una 鈥渁lternativa鈥 a faker:
https://fakerjs.dev/guide/#installation
Solo deben seguir las instrucci贸n de la p谩gina y listo! As铆 no tienen problemas con las versiones y usan una 鈥渘ueva鈥 librer铆a directamente

Para hacer que funcione la librer铆a faker reemplacen

const faker = require('faker');

Con

const faker = require('@faker-js/faker');

Este video no corresponde a este curso鈥 es importante tenerlo en cuenta!

este video no corresponde a este curso

Soy yo o de la clase 6 a la 7 hay una gran diferencia de contenido y adicionalmente no se trata de lo que dice el t铆tulo?

Esta clase no corresponde a este curso al parecer es del de nodejs con postgress

excelente curso, cada vez me enamoro mas del backend 鉂わ笍

SPOILER ALERT: Vean la clase primero, vean los memes despu茅s, y aqu铆 la explicaci贸n boomer:

Lo que pasa en el video en realidad no es un error. Si le prestan mucha atenci贸n, no es que explique 2 veces exactamente lo mismo, sino que en el primer caso (min 10:20) pone el endpoint espec铆fico antes del din谩mico, por ende no servir铆a para la finalidad del ejemplo que es, justamente, mostrar que no funciona.

B谩sicamente, al principio lo hizo bien sin darse cuenta, y despu茅s lo edit贸 y lo hizo mal a prop贸sito (min 10:50).

Obtener productos aleatorios


  1. Instalar productos
npm i @faker-js/faker
  1. hacer la importaci贸n

  2. Generar los datos aleatorios

  1. Dar una respuesta

Peque帽o aporte. Si preguntas si buscan mas de 100 productos, de esta forma limitas la b煤squeda a m谩ximo 100. De esa manera garantizas que el servidor no sufra.

 const limit= size>100? 100: size || 10;

A mi me sirvi贸 instalar la librer铆a con: npm i @faker-js/faker

Para evitar hacer el foor loop, les recomendaria hacer un mapping del array para tener un c贸digo m谩s limpio y corto

const { limit } = req.query;

const PRODUCTS_SIZE = 50;
const products = new Array(Number(limit) ?? PRODUCTS_SIZE)
  .fill({})
  .map(product => ({
    name: faker.commerce.productName(),
    price: Number(faker.commerce.price()),
    description: faker.commerce.productDescription()
  }))

res.json(products);

6.6.6. El numero tres se relaciona con el fin del mundo y el numero 6 con el diablo. La suma del tres y del seis es 9, un n煤mero que seg煤n los astronomos de los antiguos astronautas significa un error de seguridad en la matrix, por lo tanto, no usarlo

No puedo hacer que funcione. Probe de muchas maneras, como lo hizo el profesor, lo que escribian en los comentarios, tutoriales de YTube, pero al entrar a la URL me dice 鈥淣o se puede acceder a este sitio鈥. Ya estuve dias tratando y nada. Voy a tener que hacer el curso a ciegas, sin usar ningun faker 馃槗

app.get('/products', (req, res) => {
  const products = []
  const {size} = req.query
  const limit = size || 10
  for (let i = 0; i < limit; i++) {
    products.push({
      title: faker.commerce.productName(),
      price: parseInt(faker.commerce.price(), 10),
      image: faker.image.urlPicsumPhotos()
    })
  }
  res.json(products)
})

Por si alguno no entendio 鈥渆n base 10鈥 cuando escribe la linea 20:

La funci贸n parseInt se utiliza para convertir una cadena de texto en un n煤mero entero. Toma dos par谩metros: el primer par谩metro es la cadena de texto que se desea convertir, y el segundo par谩metro es opcional y se utiliza para especificar la base num茅rica en la cual se encuentra la cadena de texto.

En este caso, el segundo par谩metro, 10, se utiliza para indicar que la cadena de texto debe ser interpretada en base 10, es decir, se espera que la cadena de texto represente un n煤mero decimal. Esto se debe a que en la mayor铆a de los casos, los precios se expresan en base 10, utilizando d铆gitos del 0 al 9.

Al pasar 10 como segundo par谩metro a parseInt, te aseguras de que la cadena de texto se interprete como un n煤mero decimal correctamente. Sin este segundo par谩metro, parseInt podr铆a intentar inferir la base num茅rica bas谩ndose en el formato de la cadena de texto, lo cual puede llevar a resultados inesperados. Es una buena pr谩ctica especificar siempre la base num茅rica para evitar posibles errores de interpretaci贸n.

Las imagenes de los productos que proporciona la libreria faker son rar铆simas, aparecen gatos jajajaja

"Todo lo que sea espec铆fico, debe de indicarse antes de todo lo que sea din谩mico". De esta forma evitamos que las rutas se "choquen" y se ejecute un resultado inesperado a nivel de rutas en la API.

Una de los par谩metros de faker para este ejemplo est谩 deprecado (驴alguien conoce esta palabra en castellano?). Se trata de faker.image.imageUrl()
Dejo el c贸digo que me funcion贸 por aqu铆,

app.get('/products', (req, res)=> {
  const products = []; // creamos un array vac铆o
  for (let index = 0; index < 100; index++) {
    products.push({
      name: faker.commerce.productName(),
      price: parseInt(faker.commerce.price(), 10),
      image: faker.image.url(),
    });
  }
  res.json(products);
})

Espero les sirva!!

npm install --save-dev @faker-js/faker

npm i @faker-js/faker

Nada solo me genera un producto, en la consola me sale error en el node_modules

Actualizaci贸n de la librer铆a Faker

por si tiene alguna duda aqui tambien aclaran lo dicho en la clase
https://www.youtube.com/watch?v=dQw4w9WgXcQ&ab_channel=RickAstley

En lugar de req.params, pueden usar req.query para obtener los parametros de esa manera. Es decir:

req.params.id // para users/1
req.query.id // para users?id=1
Perd贸n por el abuso, pero por favor no digas 鈥渞andomica鈥 mejor d铆 鈥渁leatoria鈥, mis o铆dos te lo agradecer谩n 馃槈

para los que les da problemas el faker usen la versi贸n que muestra el video con el siguiente comando

npm i faker@5.5.3 -S
hola buenas tardes mi aplicavion no encuentra la ruta a packge.json, como lo puedo solucionar, muchar gracias error 768 de visual estudio code

C贸digo de la calse con algunas modificacines, ir siempre m谩s all谩 est谩 bien:

// Devolver lista de productos
app.get('/products', (req, res) => {
  const { size } = req.query;
  const limit = (Number(size) || 10);
  res.json(getProducts(limit));
});

// Devolver solo un producto
app.get('/products/:id', (req, res) => {
  const { id } = req.params;
  const { size } = req.query;
  const limit = (Number(size) || 10);
  let product = getProducts(limit).find((product) => product.id === Number(id));
  if (!product) {
    res.send('No se encontr贸 el producto');
  }
  res.json(product);
});

function getProducts(productsCount = 10 ) {
  let products = [];
  for (let index = 1; index <= productsCount; index++) {
    let product = {
      id: index,
      name: faker.commerce.productName(),
      price: Number(faker.commerce.price()),
      image: faker.image.imageUrl(),
    };
    products.push(product);
  }
  return products;
}

Esto me permite buscar por Id de producto

Par谩metros query

Son par谩metros de consulta que suelen venir en los m茅todos de consulta o m茅todos GET

api.example.com/products
api.example.com/products?page=1
api.example.com/products?limit=10&offset=0
api.example.com/products?region=USA
api.example.com/products?region=USA&brand=XYZ

crearemos una nueva ruta "/users" y recogeremos querys(limit,offset) validando si estos son recibidos y si es as铆, los mostraremos en formato JSON, de lo contrario mostraremos un mensaje de error informativo

app.get('/users', (req,res)=> {
    const { limit, offset } = req.query
    if (limit && offset){
        res.json({limit, offset})
        return
    }

    res.json({error: "no query params"})
})

si visitamos la url "/users" y a帽adimos las querys limit y offset "/users?limit=10&offset=20", como respuesta de parte del servidor veremos

{
  "limit": "10",
  "offset": "20"
}

pero si no mandamos los querys veremos un mensaje de error informativo

{
  "error": "no query params"
}

para el proyecto instalaremos una dependencia(faker) que nos permitir谩 simular vol煤menes de datos, la instalamos ejecutando en la terminal el comando

npm install @faker-js/faker --save-dev

lo importamos en nuestro archivo

const { faker } = require("@faker-js/faker")

y podemos hacer uso de ella, en este caso simularemos vol煤menes de datos de los productos con faker y crearemos estrategias de paginaci贸n utilizando querys

app.get('/products', (req,res)=> {
    const { limit = 10 } = req.query
    const products = []

    for (let i = 0; i < limit; i++){
        products.push({
            name: faker.commerce.productName(),
            price: faker.commerce.price(),
            image: faker.image.imageUrl()

        })
    }

    res.json(products)
})

si visitamos la url "/products" veremos como respuesta de parte del servidor un arreglo con 10 productos

[
  {
    "name": "Ergonomic Soft Salad",
    "price": "814.00",
    "image": "https://loremflickr.com/640/480"
  },
  {
    "name": "Intelligent Fresh Pizza",
    "price": "236.00",
    "image": "https://loremflickr.com/640/480"
  },
  {
    "name": "Luxurious Fresh Gloves",
    "price": "514.00",
    "image": "https://loremflickr.com/640/480"
  },
  {
    "name": "Oriental Steel Shirt",
    "price": "665.00",
    "image": "https://loremflickr.com/640/480"
  },
  {
    "name": "Handcrafted Rubber Chair",
    "price": "965.00",
    "image": "https://loremflickr.com/640/480"
  },
  {
    "name": "Practical Soft Pants",
    "price": "89.00",
    "image": "https://loremflickr.com/640/480"
  },
  {
    "name": "Incredible Concrete Soap",
    "price": "560.00",
    "image": "https://loremflickr.com/640/480"
  },
  {
    "name": "Generic Frozen Hat",
    "price": "123.00",
    "image": "https://loremflickr.com/640/480"
  },
  {
    "name": "Handcrafted Granite Pizza",
    "price": "259.00",
    "image": "https://loremflickr.com/640/480"
  },
  {
    "name": "Oriental Metal Table",
    "price": "746.00",
    "image": "https://loremflickr.com/640/480"
  }
]

si queremos solo obtener 3 productos y no 10, podemos pasar un query especificando la cantidad limite "/products/limit=3", y tendremos como respuesta de parte del servidor un arreglo con solo 3 productos

[
  {
    "name": "Sleek Wooden Mouse",
    "price": "475.00",
    "image": "https://loremflickr.com/640/480"
  },
  {
    "name": "Practical Bronze Tuna",
    "price": "350.00",
    "image": "https://loremflickr.com/640/480"
  },
  {
    "name": "Incredible Frozen Table",
    "price": "347.00",
    "image": "https://loremflickr.com/640/480"
  }
]

Hay que tener mucho cuidado si creamos Endpoints parecidos, los Endpoints espec铆ficos deben declararse antes que los Endpoints din谩micos, esto debido a que, si tuvi茅ramos un Endpoint din谩mico primero que un Endpoint especifico

app.get('/products/:id', (req,res)=> {
    // ...
})

app.get('/products/discount', (req,res)=> {
    // ...
})

si queremos ver los productos con descuentos y visitamos la url '/products/discount', se tomara en cuenta el primer Endpoint(el Endpoint dinamico) y 'discount' se tomara como el id din谩mico, en caso contrario

app.get('/products/discount', (req,res)=> {
    // ...
})

app.get('/products/:id', (req,res)=> {
    // ...
})

si queremos ver los productos con descuentos y vistamos la url '/products/discount', se tomara en cuenta el primer Endpoint especifico y el servidor nos responder谩 con los productos con descuento
.
probando y analizando un poco todo, alcance a notar, que si tenemos dos Endpoint parecidos y seguimos buenas practicas

/products/discount 
/products/:id

debemos tener mucho cuidado, esto debido a que si tenemos un producto con id igual a discount nunca podremos acceder a el, si intentamos buscarlo y visitamos la url "/products/discount", siempre el servidor nos devolver谩 la respuesta del Endpoint especifico y no el producto con id discount, lo que quiere decir que discount debe ser una palabra reservada que ning煤n producto la tenga como id, creo que es un caso muy particular pero es bueno tenerlo en cuenta

Para los que tengan problemas con faker como dice el compa帽ero la versi贸n 6.6.6 fue eliminada, el repositorio dej贸 de existir, para instalarlo deben hacerlo de la siguiente manera:
npm install @faker-js/faker --save-dev

importar de la siguiente manera:
const { faker } = require(鈥橜faker-js/faker鈥);

Les comparto por si necesitan:

Install:

npm install @faker-js/faker --save-dev

Node Js

import { faker } from '@faker-js/faker';

const randomName = faker.name.fullName(); // Rowan Nikolaus
const randomEmail = faker.internet.email(); // [email protected]

Or if you using CommonJS

const { faker } = require('@faker-js/faker');

const randomName = faker.name.fullName(); // Rowan Nikolaus
const randomEmail = faker.internet.email(); // [email protected]

FakerJs.dev ( https://fakerjs.dev/)

Como comentan faker esta rota a hoy Septiembre de 2022, aqu铆 encontr茅 otra que esta bien documentada.
@faker-js/faker
Documentaci贸n

npm i @faker-js/faker

y para usarla

const { faker } = require('@faker-js/faker')

Yo use lo siguiente

npm install @faker-js/faker --save-dev

const { faker } = require('@faker-js/faker') 

app.get('/products', (req, res) =>{
    const products = [];
    for(let i = 0; i < 100; i++){
        products.push({
                    id: i,
                    name: faker.commerce.productName(),
                    price: parseInt(faker.commerce.price(),10),
                    color: faker.commerce.color(),
                });
    }
    res.json(products);
});
 

otra alternativa a Faker ya que el creador la dejo muerta podria ser Falso

La parte del limit lo hice de esta forma, tambien funciona:

app.get('/products', (req, res) => {
    const {limit = 3, offset} = req.query;
    const products = [];
    for (let i=0; i< limit; i++){
        products.push({
            name: faker.commerce.productName(),
            price: parseInt(faker.commerce.price(), 10),
            image: faker.image.imageUrl()
        })
    }
    res.json(products);
});

Hola, para la parte de ponerle un limite al n煤mero de productos que traiga la petici贸n tambi茅n se puede hacer de la siguiente manera:

app.get('/products', (req, res) => {
  const { size = 10 } = req.query;
  const products = [];
  for (let i = 0; i < size; i++) {
    products.push({
      name: faker.commerce.productName(),
      price: parseInt(faker.commerce.price(), 10),
      image: faker.image.imageUrl(),
    });
  }
  res.json(products);
});

Con esto se evitan tener que crear una variable nueva.

app.get('/products', (req, res) => {

    const products = new Array(20).fill().map(() => ({
            productName: faker.commerce.product(),
            price: faker.commerce.price(),
            image: faker.image.imageUrl()
        })
    )

    res.status(200).json(products);
});

Creo que es un buen acercamiento a la hora de generar fake data mas legible y ~aesthetic ~~ que se dice tambien jajaja

app.get('/products/filter', (req, res)=>{
  res.send('las rutas especificas deben ir antes que las rutas dinamicas')
})

//esta es una ruta dinamica por tal motivo debe ir despues de las rutas especificas
app.get('/products/:id', (req, res)=>{
  const {id} = req.params 
  res.json(
    {
      id,
      name: "Producto1",
      price: 100
    }
  )
});

todo lo que sea static debe ser acomodado despues de los est谩ticos ya que si tienen la misma ruta siempre se eval煤a el dynamic dejando obsoleto el static

tengo el codigo exactamete igual y no lista los productos creados con faker鈥ue desilusi贸n. no puedo avanzar (instale la que dejaron en los comentario: npm i [email protected] -S)

instale npm i [email protected] -S pero no veo nada

excelente clase woow, esa dependencia esta genial.

Si a alguien no le funciona faker, deben instalar:

<npm install @faker-js/faker --save-dev> 

Luego deben importarlo:

<import { faker } from 鈥楡faker-js/faker鈥;> 

Probablemente les genere error el express, asi que deben importarlo tambi茅n:

<import express from 鈥榚xpress鈥;> 

Por 煤ltimo, cambien la extensi贸n del index.js a index.mjs para que reconozca las importaciones. Esto se debe hacer tambi茅n en el package.json para que se pueda usar el comando npm run start

Les dejo una alternativa a Faker ya que el repositorio actualmente no existe.

npm install --save-dev @faker-js/faker

Link oficial de Faker-js

Mi c贸digo:

app.get('/productsMarket', (request, response) => {

  let limit

  const products = []

  const querySize = request.query.size

  querySize ? limit = querySize : limit = 10

  while(limit > 0) {

    products.push({

      //Usamos los m茅todos de faker el cual nos genera datos aleatorios de un ecommerce
      product: faker.commerce.productName(),
      price: faker.commerce.price(),
      productImage: faker.image.imageUrl()
    })

    limit--
  }

  response.json(products)

})

Solo los valientes le podr谩n el size en 100000000

Data fake 馃槂

Abril del 2022
Solucione lo de Feker con

npm install faker@5.5.3

npm install @faker-js/faker --save-dev