IIC2513-2018-2 / syllabus

Material y coordinación del curso
10 stars 4 forks source link

foto ctx.body #39

Closed movaldivia closed 6 years ago

movaldivia commented 6 years ago

Hola !

No entiendo esto:

Aquí para el caso de las fotos en la nube descargamos la imagen y la ponemos en ctx.body image

Aquí creamos el path al ctx.body anterior (solo caso fotos nube) image

Aquí agregamos el path anterior, en la view del "show" ngo image

Mi duda es: ¿Cómo sabe el html que el src de la imagen viene en el ctx.body?

raulmt commented 6 years ago

El ctx.body (docs aquí) es donde se asigna en koa cualquier respuesta que quieras enviar al cliente como respuesta del request. Esto es igual independiente del tipo de respuesta que quieras entregar.

Cuando ejecutas ctx.render, esa función internamente igual asigna esta misma variable (puedes ver el código de esa función aquí, en el package koa-ejs).

En los docs de koa te dicen que koa soporta varios tipos de dato diferentes para asignar en ctx.body. El que está asignando koa-ejs con su función render es String, por ejemplo. Pero también soporta un Object (que lo transforma a JSON, como las primeras cosas que hicimos con koa en el curso) y también Streams. Eso es lo que se está usando en este caso. Al asignar un Stream como respuesta de koa, éste lo leerá hasta que termine e irá enviando cada byte en la respuesta del request.

En particular, para responder directamente la pregunta que haces: "el HTML" (siendo más correcto decir, el cliente o browser, pues el HTML es sólo el lenguaje del código que está siendo mostrado por el browser) no necesita saber nada. Hay un tag img, el browser leerá su atributo src y enviará otro request al servidor pidiendo esa URL del atributo src. La respuesta de ese request es lo que el browser intentará mostrar como una imagen. Si no es una imagen válida, entonces el browser la mostrará como una imagen "incorrecta". Pero ctx.body no tiene nada que ver con el browser; es simplemente el lugar en donde se asigna lo que queremos que koa responda en el request en curso, nada más, y es lo que siempre hemos usado, aún indirectamente a través de render.

Espero te quede más claro :)

movaldivia commented 6 years ago

@raulmt Si profesor, me quedó mucho más claro. Ahora entiendo mejor el ctx.body y que en el src de la imagen igual estamos colocando una url que al final pedirá otra cosa al servidor, en este caso el body del show logo donde estará la imagen.