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)