DEV Community

Rivier Grullon
Rivier Grullon

Posted on

Getting started with Deno (Spanish)

Este es el segundo post ya sobre Deno en español, la primera parte esta en este enlace: First look with deno(Spanish).

Configurando el entorno de trabajo.

Pasando a la instalación de Deno, abriendo la terminal digitan el siguiente comando:

Shell (macOS, Linux):

curl -fsSL https://deno.land/x/install/install.sh | sh

PowerShell (Windows):

iwr https://deno.land/x/install/install.ps1 -useb | iex

ya instalado Deno en el editor de código asumiendo que es Visual Studio Code pasamos a instalar la extensión que soporta a deno de justjack

Alt Text

ya instalada, en la carpeta .vscode se crea el archivo settings.json. Dentro del archivo se pone

//settings.json
{ "deno.enable": true, }
Enter fullscreen mode Exit fullscreen mode

Comencemos a construir la Rest API

la estructura del proyecto será

.
├── mod.ts
├── controllers
│   └── handlers.ts
└── routes
    └── routes.ts
Enter fullscreen mode Exit fullscreen mode

usaremos el framework Oak.

Comencemos por crear el archivo mod.ts importando Application de https://deno.land/x/oak/mod.ts y el enrutador de './routes/routes.ts'

import { Application } from 'https://deno.land/x/oak/mod.ts'
import router from './routes.ts'
Enter fullscreen mode Exit fullscreen mode

despues se crea el setup del entorno ya sea para poner en deploy o hacerlo local

const env = Deno.env.toObject();

const PORT = env.PORT || 3000;

const HOST = env.HOST || 'localhost';
Enter fullscreen mode Exit fullscreen mode

Ahora creamos el archivo routes.ts:

import { Router } from 'https://deno.land/x/oak@v4.0.0/mod.ts';
import { getDog,deleteDog,updateDog,addDog,getDogs } from '../controllers/handlers.ts';


const router = new Router()
router.get('/dogs', getDogs)
.get('/dogs/:id', getDog)
.post('/dogs', addDog)
.put('/dogs/:id', updateDog)
.delete('/dogs/:id', deleteDog)

export default router
Enter fullscreen mode Exit fullscreen mode

(Las funciones implementadas en estas rutas se crean en el archivo handlers.ts)

ya con esto terminamos nuestro mod.ts

const app = new Application();

console.log(`App is listening in ${HOST} in port ${PORT}`);
app.use(router.routes());
app.use(router.allowedMethods());
await app.listen(`${HOST}:${PORT}`);
Enter fullscreen mode Exit fullscreen mode

Ahora creamos nuestro handlers.ts primero declarando la interfaz para el arreglo de perros

interface Dogs {
  id : string,
  name: string,
  age: number
};

let dogs:Array <Dogs> = [
  {
    id: "1",
    name: 'Pepe',
    age: 2
  },
  {
    id: "2",
    name: 'ajio',
    age: 3
  }
];
Enter fullscreen mode Exit fullscreen mode

creamos el metodo getDogs:

const getDogs = ({ response }: { response: any }) => {
    response.body = dogs
}
Enter fullscreen mode Exit fullscreen mode

Alt Text

getDog: retorna un solo perro

const getDog = ({ params, response }: { params: { id: string }; response: any }) => {
    const dog: Dogs | undefined = searchDogById(params.id)
    if (dog) {
      response.status = 200
      response.body = dogs[0]
    } else {
      response.status = 404
      response.body = { message: `dog not found.` }
    }
  }
Enter fullscreen mode Exit fullscreen mode

Alt Text

addDog: crea un nuevo perro

  const addDog = async ({ request, response }: { request: any; response: any }) => {
    const body = await request.body()
    const dog: Dogs = body.value
    dogs.push(dog);
    response.body = { message: 'OK' }
    response.status = 200
  }
Enter fullscreen mode Exit fullscreen mode

Alt Text
Alt Text

updateDog: actualizar algun dato del perro

  const updateDog = async ({ params, request, response }: { params: { id: string }; request: any; response: any }) => {
    let dog: Dogs | undefined = searchDogById(params.id)
    if (dog) {
      const body = await request.body()
      const updateInfos: { id?: string; name?: string; age?:number} = body.value
      dog = { ...dog, ...updateInfos}
      dogs = [...dogs.filter(dog => dog.id !== params.id), dog]
      response.status = 200
      response.body = { message: 'OK' }
    } else {
      response.status = 404
      response.body = { message: `Dog not found` }
    } 
  }
Enter fullscreen mode Exit fullscreen mode

Alt Text
Alt Text

delete: para eliminar un perro especifico buscando por su id

  const deleteDog = ({ params, response }: { params: { id: string }; response: any }) => {
    dogs = dogs.filter(dog => dog.id !== params.id)
    response.body = { message: 'OK' }
    response.status = 200
  }
const searchDogById= (id: string): ( Dogs | undefined ) => dogs.filter(dog => dog.id === id )[0]

  export{
  getDogs,
  getDog,
  updateDog,
  deleteDog,
  addDog
  }
Enter fullscreen mode Exit fullscreen mode

Alt Text

Fin

Top comments (0)