DEV Community

Cover image for Sabias que se puede subir un fake backend de json-server a la nube???
joedev090
joedev090

Posted on

Sabias que se puede subir un fake backend de json-server a la nube???

Siempre que se quiere probar una nueva tecnologia o practicar las ultimas novedades de algun framework de Javascript nos vemos en la necesidad de usar json-server. Si no estas familiarizado con esta tecnologia te dejo el recurso.

https://www.npmjs.com/package/json-server

Lo curioso es que cuando subimos la app que usa este servicio a los pocos dias puede dejar de funcionar, y es aqui donde es de utilidad Render.

https://render.com/

Tendremos 2 secciones. La primera sera como configurar el servidor en Nodejs y el segundo como subirlo a la nube.

A) Configuracion de Nodejs

Veamos los pasos que debemos hacer para crear rapidamente un proyecto pequenio con nodejs y usar json-server. El mismo que nos servira como servidor.

  1. En la ubicacion de nuestra preferencia en el terminal ejecutar el comando:

npm init -y

Este comando va a crear el archivo package.json donde podremos configurar el servidor.

  1. A continuacion vamos a instalar 2 paquetes con este comando:

npm i json-server@0.17.4 cors

Este comando instalara la ultima version estable de json-server y los famosos "cors"

Dando como resultado algo similar a esto:

Image description

  1. Crear un directorio llamado src y un archivo llamado server.js donde vamos a insertar el siguiente codigo
const jsonServer = require("json-server");
const cors = require("cors");
const path = require("path");
const server = jsonServer.create();
const router = jsonServer.router(path.join(__dirname, "../data", "db.json"));
const middlewares = jsonServer.defaults();

server.use(cors());
server.use(jsonServer.bodyParser);
server.use(middlewares);
server.use(router);

const PORT = process.env.PORT || 3000;

server.listen(PORT, () => {
  console.log(`JSON Server is running on http://localhost:${PORT}`);
});
Enter fullscreen mode Exit fullscreen mode

Aqui estamos configurando el servidor en nodejs con lo basico y en la ultima linea, el mismo que escucha desde el puerto 3000 o el puerto que esta configurado para el servidor que vayamos a subir este proyecto.

  1. Crear una nueva carpeta llamado data y dentro un archivo db.json donde insertaremos estos datos de prueba que se mostraran en la llamada al endpoint. Como a continuacion:
{
    "products": [
      {
        "name": "Milk",
        "price": 1.5,
        "amount": 3,
        "id": "1",
        "image": "https://imgs.search.brave.com/M6u3m7J3bZymw167mdLJAzAFZ-O27sh3EqyczI_xxNg/rs:fit:860:0:0/g:ce/aHR0cHM6Ly9pbWFn/ZXMudW5zcGxhc2gu/Y29tL3Bob3RvLTE1/MjM0NzM4Mjc1MzMt/MmE2NGQwZDM2NzQ4/P3E9ODAmdz0xMDAw/JmF1dG89Zm9ybWF0/JmZpdD1jcm9wJml4/bGliPXJiLTQuMC4z/Jml4aWQ9TTN3eE1q/QTNmREI4TUh4elpX/RnlZMmg4TVRGOGZH/MXBiR3Q4Wlc1OE1I/eDhNSHg4ZkRBPQ",
        "desc": "Description for milk"
      },
      {
        "name": "Cereal",
        "price": 1.25,
        "amount": 15,
        "id": "2",
        "image": "https://imgs.search.brave.com/8h1O8Kb08Ato1haRsBLlD4QllX-LYab7srS3Aw6id5k/rs:fit:860:0:0/g:ce/aHR0cHM6Ly9tZWRp/YS5nZXR0eWltYWdl/cy5jb20vaWQvMTM2/NDYzOTQzNi9waG90/by9mcnVpdC1jZXJl/YWwuanBnP3M9NjEy/eDYxMiZ3PTAmaz0y/MCZjPWJDMDNIRmY3/M2x3OG04U3JwZ2Zn/R0JGaDN3YkhYVi1U/UU9yaEFObi1XQms9",
        "desc": "Description for cereal"
      },
      {
        "name": "Eggs",
        "price": 4.5,
        "amount": 12,
        "id": "3",
        "image": "https://imgs.search.brave.com/RrcrWgO7eabDGeYcubw35EMPJahv38yJNziCTjRwIqM/rs:fit:860:0:0/g:ce/aHR0cHM6Ly9tZWRp/YS5nZXR0eWltYWdl/cy5jb20vaWQvMTMw/Mzg0Mzc1OC9waG90/by9lZ2dzLWluLWEt/Y2FydG9uLmpwZz9z/PTYxMng2MTImdz0w/Jms9MjAmYz1WUmtL/bzZXakpjemFSeEFZ/U2dSWWhmZ2F4Sk9Z/d18xUjJaMzhmZm1i/ZWQwPQ",
        "desc": "Description for Eggs"
      },
      {
        "name": "Rice",
        "price": 3,
        "amount": 12,
        "id": "4",
        "image": "https://imgs.search.brave.com/-hj6EaNwC68ftdtBituJfh19Vn4ZfHtBQv7lHrZjTW4/rs:fit:860:0:0/g:ce/aHR0cHM6Ly9tZWRp/YS5nZXR0eWltYWdl/cy5jb20vaWQvMTE3/MzI2NjQwMS9waG90/by9yaWNlLWNvb2tl/ZC1yaWNlLXN0ZWFt/ZWQtcmljZS1vbi1i/b3dsLmpwZz9zPTYx/Mng2MTImdz0wJms9/MjAmYz03ZVJsSlZT/RUhPZEhZbVpVTS1z/TXFMQ3cyVlpRMVVz/Si1Ba1VsaVFWR1Q4/PQ",
        "desc": "Description for rice"
      },
      {
        "id": "5",
        "name": "Tomatoes",
        "price": "4",
        "amount": "20",
        "image": "https://imgs.search.brave.com/evSRbcQAYXNmPczN41SHIQXnKknh6XsyxDF_7l2aXds/rs:fit:860:0:0/g:ce/aHR0cHM6Ly9tZWRp/YS5oc3dzdGF0aWMu/Y29tL2V5SmlkV05y/WlhRaU9pSmpiMjUw/Wlc1MExtaHpkM04w/WVhScFl5NWpiMjBp/TENKclpYa2lPaUpu/YVdaY0x6SmlkWGt0/WjJWdVpYSnBZeTB4/TG1wd1p5SXNJbVZr/YVhSeklqcDdJbkps/YzJsNlpTSTZleUoz/YVdSMGFDSTZPREk0/ZlgxOQ",
        "desc": "Description for Tomatoes"
      },
      {
        "id": "6",
        "name": "pinaple",
        "price": "10",
        "amount": "15",
        "image": "https://imgs.search.brave.com/evSRbcQAYXNmPczN41SHIQXnKknh6XsyxDF_7l2aXds/rs:fit:860:0:0/g:ce/aHR0cHM6Ly9tZWRp/YS5oc3dzdGF0aWMu/Y29tL2V5SmlkV05y/WlhRaU9pSmpiMjUw/Wlc1MExtaHpkM04w/WVhScFl5NWpiMjBp/TENKclpYa2lPaUpu/YVdaY0x6SmlkWGt0/WjJWdVpYSnBZeTB4/TG1wd1p5SXNJbVZr/YVhSeklqcDdJbkps/YzJsNlpTSTZleUoz/YVdSMGFDSTZPREk0/ZlgxOQ",
        "desc": "Description for pinaple"
      },
      {
        "id": "7",
        "name": "Carrot",
        "price": "12",
        "amount": "14",
        "image": "https://imgs.search.brave.com/evSRbcQAYXNmPczN41SHIQXnKknh6XsyxDF_7l2aXds/rs:fit:860:0:0/g:ce/aHR0cHM6Ly9tZWRp/YS5oc3dzdGF0aWMu/Y29tL2V5SmlkV05y/WlhRaU9pSmpiMjUw/Wlc1MExtaHpkM04w/WVhScFl5NWpiMjBp/TENKclpYa2lPaUpu/YVdaY0x6SmlkWGt0/WjJWdVpYSnBZeTB4/TG1wd1p5SXNJbVZr/YVhSeklqcDdJbkps/YzJsNlpTSTZleUoz/YVdSMGFDSTZPREk0/ZlgxOQ",
        "desc": "Description for Carrot"
      },
      {
        "id": "8",
        "name": "salt",
        "price": "3",
        "amount": "5",
        "image": "https://imgs.search.brave.com/evSRbcQAYXNmPczN41SHIQXnKknh6XsyxDF_7l2aXds/rs:fit:860:0:0/g:ce/aHR0cHM6Ly9tZWRp/YS5oc3dzdGF0aWMu/Y29tL2V5SmlkV05y/WlhRaU9pSmpiMjUw/Wlc1MExtaHpkM04w/WVhScFl5NWpiMjBp/TENKclpYa2lPaUpu/YVdaY0x6SmlkWGt0/WjJWdVpYSnBZeTB4/TG1wd1p5SXNJbVZr/YVhSeklqcDdJbkps/YzJsNlpTSTZleUoz/YVdSMGFDSTZPREk0/ZlgxOQ",
        "desc": "Description for salt"
      },
      {
        "id": 9,
        "name": "Banana",
        "image": "https://www.shutterstock.com/image-photo/bunch-bananas-isolated-on-white-600nw-1722111529.jpg",
        "price": "3.4",
        "amount": "100",
        "desc": "Description for Banana"
      },
      {
        "id": 10,
        "name": "apples",
        "image": "https://www.shutterstock.com/image-photo/red-apple-isolated-on-white-600nw-1727544364.jpg",
        "price": "2",
        "amount": "50",
        "desc": "Description for apples"
      }
    ]
  }
Enter fullscreen mode Exit fullscreen mode

Una vez seguido estos pasos tendras algo similar como esto:

Image description

  1. Ejecutar el servidor de nodejs:

node src/server.js

Estar seguro que se muestre en el terminal

Json Server is running on http://localhost:3000

Algo importante que debemos tener en cuenta es que se tiene que subir este proyecto a Github, como sera mi caso o tambien GitLab o Bitbucket.

B) Configuracion del deployment en Render

Aqui empieza la segunda parte donde deberemos haremos deploy del server.

  1. Crear una cuenta en Render, en el siguiente link:

https://dashboard.render.com/register

Ingresaremos nuestros datos y va a pedir que confirme a traves del correo. Al final se muestra una pantalla como esta:

Image description

  1. Escoger la opcion Web Services donde debemos y despues seleccionar el repositorio que previamente subimos a Github.

  2. En la configuracion de Render, nos va a mostrar este formulario donde debemos llenar el campo "Start Command" con esta linea.

Se debe estar seguro de seleccionar la opcion for Hobby projects Free.

node src/server.js

Image description

  1. Configurar el "environment variables" de la siguiente manera: El nombre DATABASE_URL y el valor db.json

Image description

  1. En la parte inferior procedemos a dar clic en "Deploy Service"

Image description

Fuaaaaaa!!!

Finalmente la parte que mas nos gusta cuando todo ha salido bien, se ha hecho deploy de nuestro servidor.

Image description

En la parte superior de la ultima pantalla podemos verificar el link del deploy donde le debemos agregar /products

https://fakeserver-wip2.onrender.com/products

Y como resultado final veremos nuestro api listo para usar

Image description

Si algun caso tuviste un error te dejo el repositorio a continuacion subido en Github:

https://github.com/joeaspiazudeveloper/fakeServer

Conclusion:
Ya tenemos una manera de subir nuestros fake endpoints a la nube usando como tecnologias Nodejs, como dependencia json-server en Render.

Top comments (0)