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