con Node.js y KoaJS TEL -355 Primer semestre 2023 Campus San Joaquín Victor H. Garay Sáez. Koa Js • Denominado por sus autores como un web framework de nueva generación para Js • Es desarrollado por los mismos autores de Espress con la garantoa de ser mas liviano, robusto y mas expresivo al momento de crear aplicaciones web y APIs. • En su web describen que : ”Koa no incluye ningún middleware en su núcleo y proporciona un elegante conjunto de métodos que hacen que escribir servidores sea rápido y agradable.” • Aunque curiosamente describen una aplicación como: ” Una aplicación Koa es un objeto que contiene una serie de funciones de middleware que se componen y ejecutan en forma de pila a pedido. ” Modelo Cebolla (Onion Model) • Indica que la solicitud cruza por cada middleware como si fuera una capa de la cebolla hasta llegar a la última. • Seguidamente, continua su trayecto pasando por cada capa desde el interior hacia el exterior Proyecto inicial • En consola se ejecuta npm init -y
Donde el –y permite crear rápidamente un package.son sin el paso a paso, pero
vacío. Recuerde editar para después colocar su nombre en “author”.
• Seguidamente en consola se ejecuta
npm install -S koa
Donde –S es lo mismo que npm install --silent
Proyecto inicial • Al crear el nuevo archivo app.js este se completa con:
const Koa = require('koa');
const app = new Koa();
app.use(async ctx => {
ctx.body = ‘Presentación inicial de Koa JS'; });
app.listen(3004); //puerto que esta libre de proyectos
Proyecto inicial • En consola se ejecuta node app.js
• Seguidamente en la barra del navegador se ejecuta
http://localhost:3004 repaso • En el tercer reglón de app.js , se puede observar:
app.use(async ctx =>
• Donde async es la function que en complemento con await permite el
comportamiento asincrono basado en promesas repaso • Recordando el ejemplo de /developer.mozilla.org, se puede observar: function resolveAfter2Seconds() { return new Promise(resolve => { setTimeout(() => { resolve('resolved'); }, 2000); }); } async function asyncCall() { console.log('calling'); const result = await resolveAfter2Seconds(); console.log(result); // donde la salida esperada seria: "resolved" } asyncCall(); context(ctx) • En el tercer y cuarto reglón de app.js , se puede observar:
app.use(async ctx => {
ctx.body =
• Donde ctx es un objeto que contiene una vasta cantidad de propiedades
relacionada con las solicitudes y es de utilidad en KoaJs, un ejemplo de esto es:
• ctx.request: Objeto request de koajs. ( reconoce también node ctx.req: )
• ctx.response: Objeto response de koajs. ( reconoce también node ctx.res: ) (ctx.response.status=200 // que es un OK) context(ctx) • ctx.state: Objeto recomendado para pasar datos entre middlewares.
• ctx.throw: Función útil para lanzar errores en la aplicación, por defecto
devuelve el status 500.
• ctx.body: Es un prefijo permitido para crear el cuerpo de una pagina, aunque
lo mas formal es llamar a request.body=
• Mas información en:
https://koajs.com/#Context https://github.com/koajs/koa/wiki Fin clase 05 Gracias por su asistencia.