Node.js API za slanje Push notifikacija

U ovom ćemo blog postu napraviti Node.js API za slanje Push notifikacija. Ovaj API je samo jedan dio svega onoga što je potrebno zadovoljiti kako bi se push notifikacije mogle uspješno slati/primati i biti će zapravo nadogradnja prethodnog Node.js API-ja za upload datoteka.

Proces slanja push notifikacija:

U nekom od sljedećih blog postova napravit ćemo primjer Ionic aplikacije koja će koristiti ovaj API tj. koja će zapravo primati push notifikacije.

Google Firebase

Google Firebase ćemo koristiti kao servis koji će stajati između mobilne aplikacije i Node.js API-ja. Na adresi https://console.firebase.google.com/ potrebno je napraviti novi projekt s nazivom mobilne aplikacije koja će API koristiti.

Google Firebase Ionic

Server key će nam trebati u server.js kako bi naš API znao s kojim servisom će komunicirati.

Google Firebase Server Key

Osim toga potrebno je još dodati podršku za konkretne platforme na kojima će se temeljiti mobilna aplikacija jer svaka platforma ima svoje specifičnosti. S obzirom da je Ionic framework za izradu hibridnih mobilnih aplikacija mi ćemo odmah kreirati podršku za iOS i Android platforme.

Priprema za Android platformu

Google Firebase Android

Priprema za iOS platformu

Google Firebase iOS

Što se Google Firebasea tiče to je za sada to. Njemu ćemo se vratiti kada budemo radili mobilnu aplikaciju jer će nam trebati još neki podaci.

Testni push.js

Sada ćemo napraviti testni push.js s kojim ćemo isprobati radi li uopće naš API i hoće li push notifikacija stići na mobilni uređaj.

Prvo moramo instalirati https://www.npmjs.com/package/node-gcm pomoću naredbe $ npm install node-gcm --save.

gcmApiKey je zapravo server key koji imamo unutar Google Firebase sučelja, ali ovdje nam treba i jedinstveni token uređaja, a njega dobijemo unutar mobilne aplikacije. Kako dobiti taj token neću prikazati u ovom blog postu nego u nekom od sljedećih. Uglavnom, na slici se vidi token uređaja.

Google Developer Tools - Inspect Devices

Njega dobijemo na način da buildamo aplikaciju na mobilni uređaj i unutar chrome://inspect/#devices otvorimo konzolu iz koje kopiramo token koji onda zalijepimo u push.js

Sada imamo sve potrebno unutar push.js kako bi testirali API.

Ako sada pokrenemo $ node push.js i odemo na putanju http://localhost:3001/push

Ionic Push Send

možemo vidjeti da je push notifikacija uspješno stigla na mobilni uređaj

Android Ionic Push

Gledajući prema ovom primjeru ispada da nam svaki korisnik mobilne aplikacije treba poslati svoj jedinstveni token uređaja kako bi ga mi ručno upisali u push.js i kako bi mogli tom korisniku poslati push notifikaciju. Naravno da to nema smisla i da je ovo služilo samo za test. U produkcijskoj verziji API-ja potrebno je automatizirati čitav proces i napraviti automatsku registraciju jedinstvenog tokena, slanje tokena u bazu podataka pa će API slati push notifikacije prema svim uređajima čije tokene ima spremljene u bazu.

Nadogradnja MySQL baze

Napravit ćemo novu tablicu naziva device unutar MySQL baze u koju ćemo spremati sve tokene, a koji će u bazu biti poslani čim se mobilna aplikacija pokrene.

device table mysql

server.js nadogradnja

Sada ćemo nadograditi prethodno napravljen API za upload datoteka koji će odmah prilikom dodavanja novog korisnika poslati push notifikaciju o dodanom korisniku.

Pomoću naredbe $ npm install node-gcm ćemo instalirati https://www.npmjs.com/package/node-gcm i na vrh datoteke dodati:

Sada kada imamo spremnu novu tablicu u bazi možemo napraviti API koji će iz mobilne aplikacije primati jedinstvene tokene.

Sada možemo nadograditi i drugi dio API-ja koji služi za dodavanje korisnika.

U ovom slučaju tijelo poruke message sastojat će se od korisnik.k_ime i korisnik.k_prezime.

Iz sljedeće se animacije vidi da smo dodali novog korisnika Tomislav Stanković.

Korisnik API Push

Istovremeno s dodavanjem korisnika korisnicima mobilne aplikacije stigla je sljedeća push notifikacija.

Android Ionic korisnik Push

Zaključak

I to je to! Napravili smo funkcionalan API za slanje push notifikacija. Još ostaje za napraviti iOS i Android mobilnu aplikaciju koja će automatski slati token uređaja u MySQL bazu i koja će primati push notifikacije, ali o tome će više riječi biti u nekom od sljedećih blog postova jer bi ovaj bio previše dug ako bi se htjelo sve detaljno obraditi.

Posjetite GitHub i preuzmite projekt.

Node.js RESTful API za upload datoteka

Ovaj blog post je nastavak prošlog u kojemu smo izradili jednostavan RESTful API koristeći Node.js i Express.js.

Ondje smo imali tablicu sa korisnicima i upravljali jednostavnom formom s dva tekstualna polja tj. kroz API smo dodavali ime i prezime korisnika, uređivali ih i brisali. U ovom primjeru API-ju ćemo dodati mogućnost dodavanja datoteka koje će se spremati na disk.

Kako bi jednostavnije mogli pratiti sadržaj ovog blog posta preuzmite API iz prošlog blog posta.

Početna struktura projekta:

Nadogradnja MySQL baze

Za početak ćemo dodati dva nova polja u bazu, k_slika i k_dokument, koja će nam služiti za povezivanje datoteka s određenim korisnikom. U oba polja će se spremati putanje do datoteka, iako sliku možemo spremati i kao base64 string, ali kako to nije najbolja praksa nećemo to raditi.

Polja za datoteke u bazi

multer middleware

Kako bi API razumio što mu želimo reći kada šaljemo datoteke koristiti ćemo multer NPM paket. Paketa s istom svrhom ima više nego dovoljno da možete odabrati i neki drugi ako zaključite da vam više odgovara. Koji god koristili princip je isti, a tiče se multipart/form-data.

U mapi projekta instalirati ćemo novi paket pomoću naredbe $ npm install --save multer

Struktura projekta sada je bogatija za mapu multer:

Kao i package.json

Međutim, naš API još uvijek ne može koristiti multer, barem dok ga ne navedemo u server.js što ćemo sada i učiniti.

Server.js

U server.js dodajemo sljedeće:

Prva linija definira varijablu kojom pozivamo ranije dodani paket dok druga linija definira mapu u koju će se spremati datoteke koje budu dodane putem API-ja. Ta će se mapa stvoriti čim sljedeći put pokrenemo server.js, a nalazit će se unutar root mape KorisniciAPI.

multer uploads datoteka

Dodavanje korisnika i upload datoteka

API za dodavanje korisnika sada će dobiti neke nove mogućnosti.

Sada ćemo pomoću Postmana dodati jednog korisnika, njegovu sliku i datoteku pa ćemo analizirati proces i rezultat.

Multer upload datoteka

Kao što se vidi iz gornje animacije, nakon što kliknemo na Send i pošaljemo ime, prezime, sliku i datoteku korisnika sve se zapiše u bazu podataka u obliku stringa.

console.log(req.body); i console.log(req.files); daju nam vrlo korisne informacije. Kao prvo možemo potvrditi da je sve što smo poslali putem Postmana i stiglo, a kao drugo možemo vidjeti od čega se sastoje naše datoteke i odlučiti u kojem ćemo ih obliku spremati u bazu podataka. U ovom slučaju koristimo destination i filename .

Sliku tj. datoteku na frontendu možemo prikazati u obliku: http://localhost:8080/destination/filename

I to je to što se dodavanja datoteka tiče. Nakon što smo se uvjerili da API radi možemo izraditi formu za unos sadržaja koju će koristiti korisnici.

Brisanje korisnika

Korisnika možemo obrisati korištenjem postojećeg API-ja. I kao što se vidi u prethodnom blog postu kada pošaljemo ID korisnika sve vezano uz njega briše se iz baze. Međutim ostaje jedan problem, a to su datoteke na disku koje nisu obrisane jer API-ju smo rekli da iz baze obriše samo korisnika s određenim ID-em, ali API neće i ne zna obrisati fizičke datoteke koje se nalaze na disku.

Brisanje datoteka s diska

Kako bi to bilo moguće potrebno je koristiti Node File System (fs). Na vrhu server.js definirat ćemo varijablu var fs = require('fs');

API za brisanje korisnika sada izgleda ovako:

Osim ID-ja korisnika sada šaljemo još i naziv slike tj. naziv dokumenta http://localhost:8080/api/korisnik/2/6527f85adbde49f692efd52449764547/ad6375db29809af74be25b2d8822f46f tako da smo ta dva nova parametra morali navesti i unutar API-ja '/korisnik/:k_id/:k_slika/:k_dokument'.

Kada pokrenemo API dobijemo console.log(req.params):

i { "success": true }

Cijeli proces izgleda ovako:

NodeJS brisanje datoteka

Zaključak

Ovo je samo jedan od načina kako pomoću NodeJS-a napraviti upload i brisanje datoteka.

Posjetite GitHub i preuzmite projekt.

Izrada RESTful API-ja koristeći Node.js i Express.js

Kroz ovaj blog post pokazati ću kako napraviti jednostavan RESTful API koristeći Node.js i Express.js. Pomoću API-ja povezati ćemo se sa MySQL bazom, prikazati popis korisnika te urediti i brisati korisnike, a sve ćemo testirati pomoću Postmana.

Uz pretpostavku da imate instaliran Node.js možemo krenuti.

Postavljanje projekta

Kao i u prošlom blog postu, i ovdje prvo moramo postaviti projekt. Za početak ćemo kreirati mapu projekta koja će se zvati KorisniciAPI. Nakon toga unutar mape projekta pokrećemo naredbu $ npm init --yes kako bi dobili package.json

Kako bi ovaj API radio ono što smo zamislili moramo dodati nekoliko NPM paketa, a to su:

Nakon instalacije primijetit ćete dvije stvari, a to su nova mapa node_modules i promjena unutar package.json.

Server.js

Sada znamo da će prilikom pokretanja Node.js tražiti server.js pa ga idemo napraviti.

Struktura projekta sada izgleda ovako i više se neće mijenjati, osim sadržaja unutar server.js:

Nakon što smo testirali naš API pomoću rute http://localhost:8080/api zaključujemo da je sve u redu i možemo krenuti dalje.

API test

MySQL baza i korisnici

Sada ćemo napraviti MySQL bazu podataka naziva korisniciapi s poljima k_id, k_ime i k_prezime.

MySQ Lkorisnici

Kako bi našu MySQL bazu povezali sa server.js moramo dodati sljedeće:

Sada imamo sve što nam je potrebno kako bi mogli napraviti rute za dodavanje (POST), dohvaćanje (GET), uređivanje (PUT) i brisanje (DELETE) korisnika.

Middleware

Ako želimo da se nešto dogodi svaki put kada naš API dobije nekakav zahtjev onda koristimo middleware. Za potrebe ovog primjera stavit ćemo da nam console.log() poruku.

Kreiranje ruta

Krećemo s izradom ruta za naše korisnike.

Dodavanje korisnika

POST http://localhost:8080/api/dodajkorisnika

API za dodavanje korisnika

Dohvaćanje svih korisnika

GET http://localhost:8080/api/pregledkorisnika

Dohvaćanje svih korisnika

Uređivanje jednog korisnika

PUT http://localhost:8080/api/korisnik/:k_id

Uređivanje jednog korisnika

Brisanje jednog korisnika

DELETE http://localhost:8080/api/korisnik/:k_id

Brisanje jednog korisnika

Zaključak

Ovo su osnove osnova kada je u pitanju izrada APi-ja. Nismo se dotaknuli pitanja sigurnosti, autentifikacije korisnika niti pokušali slati datoteke, npr. slike od korisnika, pomoću API-ja. Možda o tome bude riječi nekom drugom prilikom.

Naravno da kada budete radili kompleksniji sustav nećete sve rute staviti u server.js nego će svaka ruta imati svoju datoteku.

Posjetite GitHub i preuzmite projekt.