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
ya instalada, en la carpeta .vscode se crea el archivo settings.json. Dentro del archivo se pone
//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'
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
const env = Deno.env.toObject();
const PORT = env.PORT || 3000;
const HOST = env.HOST || 'localhost';
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
(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}`);
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
}
];
creamos el metodo getDogs:
const getDogs = ({ response }: { response: any }) => {
response.body = dogs
}
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.` }
}
}
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
}
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` }
}
}
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
}
Top comments (0)