De HTML a Express

45
De HTML a Express

Transcript of De HTML a Express

Page 1: De HTML a Express

De HTML a Express

Page 2: De HTML a Express

Acerca de mi

Rulo Kobashikawa

@rulokoba

Page 3: De HTML a Express

Simple HTML

Un site estático simple es una colección de archivos:

● HTML● CSS● Javascript● Imágenes, audio, video,

etc

site

css

js

styles.css

scripts.js

index.html

img

photo.jpg

Page 4: De HTML a Express

Simple HTML : index.html

El documento html organiza el contenido y la forma de presentarlo.

Indica los archivos que requiere.

<!DOCTYPE html><html lang="es">

<head> <meta charset="UTF-8"> <title>Mi Site</title> <link rel="stylesheet" href="css/styles.css"></head>

<body> <h1>Mi Site</h1> <img src="img/photo.jpg"> <script src="js/scripts.js"></script></body>

</html>

Page 5: De HTML a Express

Simple HTML : index.html

Mi Site<!DOCTYPE html><html lang="es">

<head> <meta charset="UTF-8"> <title>Mi Site</title> <link rel="stylesheet" href="css/styles.css"></head>

<body> <h1>Mi Site</h1> <img src="img/photo.jpg"> <script src="js/scripts.js"></script></body>

</html>

Page 6: De HTML a Express

body { font-family: Arial, sans-serif; text-align: center;}

Simple CSS : styles.css

Las hojas de estilo permiten centralizar las indicaciones de diseño y formato.

Page 7: De HTML a Express

body { font-family: Arial, sans-serif; text-align: center; background: gray;}img { border: 10px solid white;}

Simple CSS : styles.css

Mi Site

Page 8: De HTML a Express

function() { //...}

Simple JS : scripts.js

Los scripts permiten definir comportamientos especiales:

● Manipular el contenido● Obtener datos externos

AJAX

EFECTOS

COMPONENTS

Page 9: De HTML a Express

function() { //...}

Simple JS : scripts.js

Mi Site

Page 10: De HTML a Express

Backend

Es usual extender las funcionalidades de un servidor web (como Apache, Nginx) con ayuda de un framework:

● CakePHP● Laravel (PHP)● Rails (Ruby)● Django (Python)● Express (NodeJS, Javascript)

WEBSERVER

PLANTILLAS

FRAMEWORK DATOS

REST

Page 11: De HTML a Express

Frameworks para Backend

Es usual extender las funcionalidades de un servidor web (como Apache, Nginx) con ayuda de un framework:

● CakePHP● Laravel (PHP)● Rails (Ruby)● Django (Python)● Express (NodeJS, Javascript)

Page 12: De HTML a Express

SPA: Single Page Application

En las páginas tipo SPA, la interfaz se va acercando a las de aplicaciones de escritorio.

Page 13: De HTML a Express

Frameworks para SPA

Para manejar esa complejidad, han aparecido varios frameworks, como:

● Backbone● Ember● Angular● Flux (React)

Page 14: De HTML a Express

Usando AngularJS

● https://angularjs.org/

Page 15: De HTML a Express

Usando AngularJS : idea

Extender el HTML

DIRECTIVE

SERVICE FACTORY

CONTROLLER

MODULE

Page 16: De HTML a Express

miApp

miController$scope

Usando AngularJS : esquema básico

<!DOCTYPE html><html lang="es" ng-app="miApp">

<head> <meta charset="UTF-8"> <title>Mi Site</title> <link rel="stylesheet" href="css/styles.css"></head>

<body ng-controller="MiController"> ... <script src="js/angular.js"></script></body>

</html>

Page 17: De HTML a Express

Usando AngularJS : ejemplo básico

<div class="container" ng-init="nombre='Mundo';">

<h1>Hola {{ nombre }}</h1>

<input type="text" ng-model="nombre">

</div >

Page 18: De HTML a Express

Usando AngularJS : module

angular.module('miApp', []);

define la aplicación y sus dependencias

Page 19: De HTML a Express

Usando AngularJS : controller

angular.module('miApp') .controller('MiController', MiController);

function MiController($scope) {...}

define un controlador y sus dependencias

Page 20: De HTML a Express

Usando AngularJS : directivas

● ng-app● ng-controller● ng-init● ng-model● ng-repeat● ng-show● ng-hide

Alteran el comportamiento de un elemento HTML.

Es posible definir directivas personalizadas.

Page 21: De HTML a Express

Usando AngularJS : service

angular.module('miApp') .service('miService', miService);

function miService() { this.miMetodo = function() {...};

}...function MiController($scope, miService) {...};

un service puede proveer datos a un controller

Page 22: De HTML a Express

Usando AngularJS : factoryangular.module('miApp') .factory('miFactory', miFactory);

function miFactory() { var factory = {}; factory.miMetodo = function() {...}; return factory;}...function MiController($scope, miFactory) {...};

un factory también puede proveer datos a un controller

Page 23: De HTML a Express

Usando AngularJS : esquema simple

Todo en un único archivo.site

js

app.js

index.html

Page 24: De HTML a Express

Usando AngularJS : separando

● modulos en app● rutas en routes● controladores en

controllers● services y factories en

services

site

js

app.js

index.html

controllers.js

services.js

routes.js

Page 25: De HTML a Express

Usando AngularJS : reorganizando

El esquema simple se replica en cada módulo

site

js

app.js

index.html

mod1

mod2

app.js

Page 26: De HTML a Express

Usando AngularJS : creciendo

La separación se va replicando en cada módulo

site

js

app.js

index.html

mod1

controllers.js services.js

routes.js

app.js

mod2

controllers.js services.js

routes.js

Page 27: De HTML a Express

Usando NodeJS

● https://nodejs.org● http://expressjs.com/

● https://github.com/creationix/nvm

● http://nodemon.io/

Page 28: De HTML a Express

Usando NodeJS : idea

● Usar Javascript en el lado del servidor

● Google V8 Javascript EngineRyan Dahl2009

● Event driveNon blocking I/O APISimple, no threads

● 2014: io.js2015: node.js + io.js

Page 29: De HTML a Express

Usando NodeJS : usado por

Page 30: De HTML a Express

Usando NodeJS : empleabilidad

Page 31: De HTML a Express

Usando NodeJS : empleabilidad

Page 32: De HTML a Express

Usando NodeJS : init

$ npm init

Inicializa un proyecto:

● package.json● node_modules/

Page 33: De HTML a Express

Instalar un módulo.

instala package.json

instala módulo

actualiza package.json

Usando NodeJS : install

$ npm install

$ npm install modulo

$ npm install --save modulo

Page 34: De HTML a Express

Desinstalar un módulo.

actualiza package json

Usando NodeJS : uninstall

$ npm uninstall modulo

$ npm uninstall --save modulo

Page 35: De HTML a Express

Usando Express : install

$ npm install -g express

$ npm install express-generator

Instala el generador de express

Page 36: De HTML a Express

Usando Express : base

$ cd miproyecto

$ express

$ npm install

Genera una base para iniciar una proyecto en express

Page 37: De HTML a Express

Usando Express : run

$ npm start

Se puede correr inmediatamente en el puerto 3000

Express

Welcome to Express

http://localhost:3000

Page 38: De HTML a Express

Usando Express : directorios

Estructura de directorios que usa Express

miproyecto

bin

app.js

public

routes

views

Page 39: De HTML a Express

Usando Express + Angular

Usando Angular con Express

miproyecto

bin

app.js

public

routes

views

index.html

Page 40: De HTML a Express

Usando Express + Angular

Usando Angular con Express

miproyecto

bin

app.js

public

routes

views

index.html

js

app.js

index.html

controllers.js

services.js

routes.js

Page 41: De HTML a Express

Usando Express + Angular : nunjucks

Express puede usar diversos sistemas de template:

● jade (default)● nunjucks

// view engine setupapp.set('views', path.join(__dirname, 'views'));app.set('view engine', 'html');var nunjucks = require('nunjucks');nunjucks.configure('views', { autoescape: true, noCache: true, express: app, watch: true});

app.use(express.static(path.join(__dirname, 'public')));

app.js

Page 42: De HTML a Express

Usando Express + Angular : nunjucks

/* GET home page. */router.get('/', function(req, res, next) { res.render('index.html', { title: 'Express' });});

routes/index.js

<!DOCTYPE html><html lang="es" ng-app="miApp"><head> <meta charset="UTF-8"> <title>{{title}}</title></head><body> {% block body %}{% endblock %}</body></html>

{% extends "layout.html" %}{% block body %}<h1>{{message}}</h1><h2>{{error.status}}</h2><pre>{{error.stack}}</pre>{% block body %}

views/error.html

views/layout.html{% extends "layout.html" %}{% block body %} <div ng-controller="MiController"> <h1>{{ title }}</h1> <p>Welcome to {{title}}</p> <script src="/js/angular.js"></script> </div>{% endblock %}

views/index.html

Page 43: De HTML a Express

JS en Backend y Frontend ^^

Page 44: De HTML a Express

Algunos Links

● NodeJS: http://nodejs.org/

● ExpressJS: http://expressjs.com/

● AngularJS: https://angularjs.org/

● Nunjucks: https://mozilla.github.io/nunjucks/

● Expresss + Nunjucks: https://github.com/akobashikawa/express-nunjucks

Page 45: De HTML a Express

Gracias(^^)

@rulokoba