Getting started with Deno (Spanish)
Tags: deno, javascript, typescript, node
Published: 2020-05-28 02:48:44

Este es el segundo post ya sobre Deno en español, la primera parte esta en este enlace: [First look with deno(Spanish)](https://dev.to/buttercubz/first-look-with-deno-spanish-30dh).

## 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](https://dev-to-uploads.s3.amazonaws.com/i/vw7tc3bh7t96n612wjnf.png)

ya instalada, en la carpeta .vscode se crea el archivo settings.json. Dentro del archivo se pone
```javascript
//settings.json
{ "deno.enable": true, }
```

**Comencemos a construir la Rest API**

la estructura del proyecto será 

```
.
├── mod.ts
├── controllers
│   └── handlers.ts
└── routes
    └── routes.ts
```
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'

```javascript
import { Application } from 'https://deno.land/x/oak/mod.ts'
import router from './routes.ts'
```

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

```javascript
const env = Deno.env.toObject();

const PORT = env.PORT || 3000;

const HOST = env.HOST || 'localhost';
```

Ahora creamos  el archivo routes.ts:

```javascript
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
```

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

ya con esto terminamos nuestro mod.ts

```javascript
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}`);
```

Ahora creamos nuestro handlers.ts primero declarando la interfaz para el arreglo de perros
```javascript
interface Dogs {
  id : string,
  name: string,
  age: number
};

let dogs:Array <Dogs> = [
  {
    id: "1",
    name: 'Pepe',
    age: 2
  },
  {
    id: "2",
    name: 'ajio',
    age: 3
  }
];
```
creamos el metodo getDogs:
```javascript
const getDogs = ({ response }: { response: any }) => {
    response.body = dogs
}
```
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/59jenwdc440cojs5fsbo.png)

getDog: retorna un solo perro

```javascript
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.` }
    }
  }
```
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/2tb1t2fkfdluiciobs6n.png)

addDog: crea un nuevo perro
```javascript
  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
  }
```
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/a5ph9h89el7hgwprd80e.png)
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/qymsusv0k36hzqy1pgw8.png)

updateDog: actualizar algun dato del perro

```javascript
  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` }
    } 
  }
```
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/clp2r0cj55jyij1iyvaf.png)
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/eulfwyj65rlp6bysizew.png)

delete: para eliminar un perro especifico buscando por su id 
```javascript
  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
  }
```
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/do5ewmgbk4lwnqfoa6un.png)



##Fin