Angular

Workshop 5

Samuel Šramko

Čo už máme za sebou

  • prácu s HTTP
  • routing
  • .
  • .
  • .

Node

  • BE pre GUI v Reacte, Angulari, VueJS je možné robiť rôznymi technológiami
    • Java, .NET, PHP, Javascript
  • Node.JS aplikácia je v podstate 1 spustiteľný JS súbor
  • budeme stavať REST server pre naše GUI, ktorý bude napojený na PostgreSQL databázu

Express

  • framework pre rýchlu rvorbu REST servera
  • teoreticky na 5 riadkoch, prakticky je toho trochu viac

 

  • vytvorenie serveru na danom porte, definovanie jednotlivých route a handlerov pre jednotlivé route

 

  • počúvanie HTTP requestov na danom porte spustíme cez metódu listen na konkrétnej inštancii express frameworku

Express

  • na inštancii express definujeme handlery pre jednotlivé HTTP metódy na konkrétnych cestách
    • get, post, put, delete, patch, options
    • pvrým parametrom je cesta, druhým je handler berúci 2-3 parametre
      • request
      • response
      • next 
    • základná metóda na odoslanie odpovede je response.send(), ktorá pošle surové dáta

Express

  • pre komunikáciu v JSON formáte je nutné použiť JSON body parser middleware, modul body-parser
    • middleware - rozšírenie express frameworku o špecifickú funkcionalitu
    • ďalším zaujímavým middleware je multipart spracovanie súborov - multiparty
  • error handling je možný definovaním globánej erro funkcie, v ktorej sa zaloguje chyba a odošle sa správny error response

PostgreSQL

  • Relačná DB, podobná s MySQL, open source, jednoducho škálovateľná a replikovateľná
  • štandardná sada SQL dotazov a príkazov
    • create database [name] ...
    • create table [name] ...
    • select * from [table] ...
    • update [table] set ...
  • vrámci kurzu použijeme službu https://www.elephantsql.com/, kde máme jednoduchú malú DB hneď nakonfigurovanú ako službu

Sequelize

  • ORM pre NodeJS a rôzne databázy
  • definuje sa connection a model pre každú tabuľku
  • nad modelmi sa spúšťajú dotazy a synchronizácie
  • Promise based -> môžeme využiť async/await
  • podporuje väzby, transakcie, dotazovanie,...
  • deklaratívny zápis query

Sequelize

  • pripojenie do DB
const Sequelize = require('sequelize');
const sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhost',
  dialect: 'mysql'|'postgres'|'mssql',

  pool: {
    max: 5,
    min: 0,
    acquire: 30000,
    idle: 10000
  },
});

// Or you can simply use a connection uri
const sequelize = new Sequelize('postgres://user:pass@example.com:5432/dbname');

Sequelize

  • definovanie modelu
const User = sequelize.define('user', {
  firstName: {
    type: Sequelize.STRING
  },
  lastName: {
    type: Sequelize.STRING
  }
});

// force: true will drop the table if it already exists
User.sync({force: true}).then(() => {
  // Table created
  return User.create({
    firstName: 'John',
    lastName: 'Hancock'
  });
});

Sequelize

  • query
User.findAll().then(users => {
  console.log(users);
})

// alternativne s async/await vo vnutri async funkcie

async function() {
.
.
.
  const user = await User.findOne();
  console.log(user.get('firstName'));
.
.
.
}

Sequelize

  • operátory vo where query
Project.findAll({
  where: {
    id: {
      [Op.and]: {a: 5},           // AND (a = 5)
      [Op.or]: [{a: 5}, {a: 6}],  // (a = 5 OR a = 6)
      [Op.gt]: 6,                // id > 6
      [Op.gte]: 6,               // id >= 6
      [Op.lt]: 10,               // id < 10
      [Op.lte]: 10,              // id <= 10
      [Op.ne]: 20,               // id != 20
      [Op.between]: [6, 10],     // BETWEEN 6 AND 10
      [Op.notBetween]: [11, 15], // NOT BETWEEN 11 AND 15
      [Op.in]: [1, 2],           // IN [1, 2]
      [Op.notIn]: [1, 2],        // NOT IN [1, 2]
      [Op.like]: '%hat',         // LIKE '%hat'
      [Op.notLike]: '%hat',       // NOT LIKE '%hat'
      [Op.iLike]: '%hat',         // ILIKE '%hat' (case insensitive)  (PG only)
      [Op.notILike]: '%hat',      // NOT ILIKE '%hat'  (PG only)
      [Op.overlap]: [1, 2],       // && [1, 2] (PG array overlap operator)
      [Op.contains]: [1, 2],      // @> [1, 2] (PG array contains operator)
      [Op.contained]: [1, 2],     // <@ [1, 2] (PG array contained by operator)
      [Op.any]: [2,3]            // ANY ARRAY[2, 3]::INTEGER (PG only)
    },
    status: {
      [Op.not]: false           // status NOT FALSE
    }
  }
})

ITA-04-JS Angular, Workshop 5

By IT-absolvent

ITA-04-JS Angular, Workshop 5

5. workshop Angular 2+

  • 675