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
Introducción
¿Qué es Express.js?
Configuración del entorno de desarrollo para este curso
Instalación de Express.js y tu primer servidor HTTP
Routing con Express.js
CRUD
¿Qué es una RESTful API?
¡Es tu turno: crea un tutorial!
GET: recibir parámetros
GET: parámetros query
Separación de responsabilidades con express.Router
Instalación de Postman o Insomia
POST: método para crear
PUT, PATCH y DELETE
Códigos de estado o HTTP response status codes
Servicios
Introducción a servicios: crea tu primer servicio
Crear, editar y eliminar
Async await y captura de errores
Middlewares
¿Qué son los Middlewares?
Middleware para HttpErrors
Manejo de errores con Boom
Validación de datos con Joi
Probando nuestros endpoints
Middlewares populares en Express.js
Deployment
Consideraciones para producción
Problema de CORS
Deployment a Heroku
Deployment a Vercel
Próximos pasos
Continúa en el Curso de Node.js con PostgreSQL
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 127
Preguntas 25
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 ‘tablaUsuarios’ 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 🤦♂️
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
})
}
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 “poblar” en lugar de “popular”. 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
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/
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
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:
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 ‘package.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 “What 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 “alternativa” 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 “nueva” 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).
npm i @faker-js/faker
hacer la importación
Generar los datos aleatorios
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 “No 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 “en 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
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
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);
});
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…que 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 ‘express’;>
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
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
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?
o inicia sesión.