{"id":4590,"date":"2017-01-08T22:06:06","date_gmt":"2017-01-08T20:06:06","guid":{"rendered":"https:\/\/www.tomislavstankovic.com\/blog\/?p=4590"},"modified":"2019-01-05T19:58:30","modified_gmt":"2019-01-05T17:58:30","slug":"jednostavan-nodejs-expressjs-rest-api","status":"publish","type":"post","link":"https:\/\/www.tomislavstankovic.com\/blog\/jednostavan-nodejs-expressjs-rest-api\/","title":{"rendered":"Izrada RESTful API-ja koriste\u0107i Node.js i Express.js"},"content":{"rendered":"<p>Kroz ovaj blog post pokazati \u0107u kako napraviti jednostavan <em>RESTful API<\/em> koriste\u0107i <a href=\"https:\/\/nodejs.org\/en\/\" target=\"_blank\"><em>Node.js<\/em><\/a> i <a href=\"https:\/\/expressjs.com\/\" target=\"_blank\"><em>Express.js<\/em><\/a>. Pomo\u0107u <em>API<\/em>-ja povezati \u0107emo se sa <em>MySQL<\/em> bazom, prikazati popis korisnika te urediti i brisati korisnike, a sve \u0107emo testirati pomo\u0107u <a href=\"https:\/\/www.getpostman.com\/\" target=\"_blank\"><em>Postmana<\/em><\/a>. <\/p>\n<p>Uz pretpostavku da imate instaliran <a href=\"https:\/\/nodejs.org\/\" target=\"_blank\">Node.js<\/a> mo\u017eemo krenuti.<\/p>\n<h2>Postavljanje projekta<\/h2>\n<p>Kao i u <a href=\"https:\/\/www.tomislavstankovic.com\/blog\/postavljanje-angular2-typescript-projekta\/\" target=\"_blank\">pro\u0161lom blog postu<\/a>, i ovdje prvo moramo postaviti projekt. Za po\u010detak \u0107emo kreirati mapu projekta koja \u0107e se zvati <strong>KorisniciAPI<\/strong>. Nakon toga unutar mape projekta pokre\u0107emo naredbu  <span class=\"lang:sh decode:true  crayon-inline \" >$ npm init &#8211;yes<\/span>  kako bi dobili <strong>package.json <\/strong><\/p>\n<pre class=\"lang:default mark:5 decode:true \" >{\r\n  \"name\": \"KorisniciAPI\",\r\n  \"version\": \"1.0.0\",\r\n  \"description\": \"Primjer izrade jednostavnog Node.js i Express.js RESTful API-ja\",\r\n  \"main\": \"server.js\", \/\/ina\u010de bude index.js\r\n  \"scripts\": {\r\n    \"test\": \"echo \\\"Error: no test specified\\\" &amp;&amp; exit 1\"\r\n  },\r\n  \"keywords\": [],\r\n  \"author\": \"Tomislav Stankovi\u0107\",\r\n  \"license\": \"MIT\"\r\n}<\/pre>\n<p>Kako bi ovaj API radio ono \u0161to smo zamislili moramo dodati nekoliko NPM paketa, a to su:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/express\" target=\"_blank\">Express.js<\/a>:  <span class=\"lang:sh decode:true  crayon-inline \" >$ npm install express &#8211;save<\/span> <\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/body-parser\" target=\"_blank\">bodyParser<\/a>: <span class=\"lang:sh decode:true  crayon-inline \" >$ npm install body-parser -save<\/span> <\/li>\n<li><a href=\"https:\/\/www.npmjs.com\/package\/mysql\" target=\"_blank\">MySQL<\/a>: <span class=\"lang:sh decode:true  crayon-inline \" >$ npm install mysql &#8211;save<\/span> <\/li>\n<\/ul>\n<p>Nakon instalacije primijetit \u0107ete dvije stvari, a to su nova mapa <strong>node_modules <\/strong>i promjena unutar <strong>package.json<\/strong>.<\/p>\n<pre class=\"lang:default mark:12-16 decode:true \" >{\r\n  \"name\": \"KorisniciAPI\",\r\n  \"version\": \"1.0.0\",\r\n  \"description\": \"Primjer izrade jednostavnog Node.js i Express.js RESTful API-ja\",\r\n  \"main\": \"server.js\",\r\n  \"scripts\": {\r\n    \"test\": \"echo \\\"Error: no test specified\\\" &amp;amp;&amp;amp; exit 1\"\r\n  },\r\n  \"keywords\": [],\r\n  \"author\": \"Tomislav Stankovi\u0107\",\r\n  \"license\": \"MIT\",\r\n  \"dependencies\": {\r\n    \"body-parser\": \"^1.15.2\",\r\n    \"express\": \"^4.14.0\",\r\n    \"mysql\": \"^2.12.0\"\r\n  }\r\n}<\/pre>\n<h2>Server.js<\/h2>\n<p>Sada znamo da \u0107e prilikom pokretanja <em>Node.js<\/em> tra\u017eiti <strong>server.js<\/strong> pa ga idemo napraviti.<\/p>\n<pre class=\"lang:js decode:true \" >var express = require('express');  \/\/ poziva express iz node_modules\r\nvar app = express();  \/\/ ozna\u010dava da na\u0161a aplikacija koristi express\r\nvar mysql = require('mysql');  \/\/ poziva mysql iz node_modules\r\nvar bodyParser = require('body-parser');  \/\/ poziva bodyParser iz node_modules\r\n\r\n\/\/ ozna\u010dava da app koristi bodyParser() kako bi mogao dobiti podatke iz POST zahtjeva\r\napp.use(bodyParser.urlencoded({ extended: true }));\r\napp.use(bodyParser.json());\r\n\r\nvar port = process.env.PORT || 8080;        \/\/ definira port na kojemu \u0107e API raditi\r\n\r\n\/\/ definiranje zadane (defaultne) rute za na\u0161 API\r\nvar apiRoutes = express.Router();\r\n\r\n\/\/ testiranje rute (GET http:\/\/localhost:8080\/api)\r\napiRoutes.get('\/', function(req, res) {\r\n    res.json({ message: 'API radi!' });   \/\/ako je sve ispravno postavljeno kao odgovor \u0107emo dobiti ovu poruku\r\n});\r\n\r\n\/\/ ostale GET, POST, PUT, DELETE biti \u0107e definirane ovdje\r\n\r\n\/\/ sve rute sadr\u017eavati \u0107e \/api\r\napp.use('\/api', apiRoutes);\r\n\r\n\/\/ pokretanje API-ja\r\napp.listen(port);\r\nconsole.log('API je pokrenut i koristi port:' + ' ' + port);<\/pre>\n<p>Struktura projekta sada izgleda ovako i vi\u0161e se ne\u0107e mijenjati, osim sadr\u017eaja unutar <strong>server.js<\/strong>:<\/p>\n<pre class=\"lang:default decode:true \" >| - KorisniciAPI\/\r\n     | - node_modules\/\r\n          | - body-parser\/\r\n          | - express\/\r\n          | - mysql\/\r\n     | - server.js\r\n     | - package.json<\/pre>\n<p>API pokre\u0107emo naredbom<\/p>\n<pre class=\"lang:sh decode:true \" >$ node server.js<\/pre>\n<p>Nakon \u0161to smo testirali na\u0161 API pomo\u0107u rute  <span class=\"lang:default decode:true  crayon-inline \" >http:\/\/localhost:8080\/api<\/span>  zaklju\u010dujemo da je sve u redu i mo\u017eemo krenuti dalje.<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/01\/API-test.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/01\/API-test.gif\" alt=\"API test\" width=\"1805\" height=\"1069\" class=\"aligncenter size-full wp-image-4601\" \/><\/a><\/p>\n<h2>MySQL baza i korisnici<\/h2>\n<p>Sada \u0107emo napraviti <em>MySQL<\/em> bazu podataka naziva <strong>korisniciapi<\/strong> s poljima <strong>k_id<\/strong>, <strong>k_ime <\/strong>i <strong>k_prezime<\/strong>.<\/p>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/01\/MySQLkorisnici.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/01\/MySQLkorisnici.jpg\" alt=\"MySQ Lkorisnici\" width=\"479\" height=\"220\" class=\"aligncenter size-full wp-image-4607\" srcset=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/01\/MySQLkorisnici.jpg 479w, https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/01\/MySQLkorisnici-300x138.jpg 300w\" sizes=\"auto, (max-width: 479px) 100vw, 479px\" \/><\/a><\/p>\n<p>Kako bi na\u0161u <em>MySQL<\/em> bazu povezali sa <strong>server.js<\/strong> moramo dodati sljede\u0107e:<\/p>\n<pre class=\"lang:js decode:true \" > var pool = mysql.createPool({\r\n        host: 'localhost',\r\n        user: 'root',\r\n        password: '',\r\n        database: 'korisniciapi'\r\n    }); <\/pre>\n<p>Sada imamo sve \u0161to nam je potrebno kako bi mogli napraviti rute za dodavanje (<em>POST<\/em>), dohva\u0107anje (<em>GET<\/em>), ure\u0111ivanje (<em>PUT<\/em>) i brisanje (<em>DELETE<\/em>) korisnika.<\/p>\n<h2>Middleware<\/h2>\n<p>Ako \u017eelimo da se ne\u0161to dogodi svaki put kada na\u0161 API dobije nekakav zahtjev onda koristimo <em><a href=\"https:\/\/expressjs.com\/en\/guide\/using-middleware.html\" target=\"_blank\">middleware<\/a><\/em>. Za potrebe ovog primjera stavit \u0107emo da nam  <span class=\"lang:js decode:true  crayon-inline \" >console.log()<\/span>  poruku. <\/p>\n<pre class=\"lang:js decode:true \" >apiRoutes.use(function(req, res, next) {\r\n    \/\/ provjera korisni\u010dkih podataka prilikom logirana\/prijave\r\n    console.log('Ne\u0161to se doga\u0111a.');\r\n    next(); \/\/ idi na sljede\u0107u rutu\r\n});<\/pre>\n<h2>Kreiranje ruta<\/h2>\n<p>Kre\u0107emo s izradom ruta za na\u0161e korisnike.<\/p>\n<h3>Dodavanje korisnika<\/h3>\n<p><strong>POST<\/strong>  <span class=\"lang:default decode:true  crayon-inline \" >http:\/\/localhost:8080\/api\/dodajkorisnika<\/span> <\/p>\n<pre class=\"lang:js decode:true \" > apiRoutes.post('\/dodajkorisnika', function (req, res, next) {\r\n\r\n   pool.getConnection(function(err, connection) {\r\n \r\n        if (err) {\r\n            console.error(\"Dogodila se gre\u0161ka: \" + err);\r\n        }\r\n\r\n            var korisnik = { \r\n            k_ime: req.body.ime,\r\n            k_prezime: req.body.prezime\r\n            };      \r\n\t\t\t\r\n            connection.query('INSERT INTO korisnik SET ?', korisnik,\r\n            function(err, rows) {\r\n                if (err) {\r\n                    throw err;\r\n                } else {\r\n\t\t    res.json(\"Uspje\u0161no dodan korisnik!\");\r\n                    res.end();\r\n                }\r\n                connection.release();\r\n            });\r\n    });\r\n})<\/pre>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/01\/post-korisnik.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/01\/post-korisnik.gif\" alt=\"API za dodavanje korisnika\" width=\"1833\" height=\"726\" class=\"aligncenter size-full wp-image-4616\" \/><\/a><\/p>\n<h3>Dohva\u0107anje svih korisnika<\/h3>\n<p><strong>GET<\/strong>  <span class=\"lang:default decode:true  crayon-inline \" >http:\/\/localhost:8080\/api\/pregledkorisnika<\/span> <\/p>\n<pre class=\"lang:js decode:true \" >apiRoutes.get('\/pregledkorisnika', function(req, res,next){\r\n\r\npool.getConnection(function(err, connection) {\r\n\r\n        if (err) {\r\n            console.error(\"Dogodila se gre\u0161ka: \" + err);\r\n        }\r\n\r\n       var query = \"SELECT * FROM korisnik ORDER BY k_id ASC\";\r\n       \r\n        var table = [\"korisniciapi\"];\r\n        \r\n        query = mysql.format(query,table);\r\n\r\n        connection.query(query,function(err,rows){\r\n           connection.release();\r\n            if (err) {               \r\n               return next(err);\r\n            } else {\r\n                res.json({\r\n                    success: true,\r\n                    popis_korisnika: rows\r\n                });\r\n            }\r\n        });\r\n    });\r\n});<\/pre>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/01\/get-korisnici.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/01\/get-korisnici.gif\" alt=\"Dohva\u0107anje svih korisnika\" width=\"854\" height=\"773\" class=\"aligncenter size-full wp-image-4618\" \/><\/a><\/p>\n<h3>Ure\u0111ivanje jednog korisnika<\/h3>\n<p><strong>PUT<\/strong>  <span class=\"lang:default decode:true  crayon-inline \" >http:\/\/localhost:8080\/api\/korisnik\/:k_id<\/span> <\/p>\n<pre class=\"lang:js decode:true \" >apiRoutes.put('\/korisnik\/:k_id', function(req, res, next){\r\n\r\npool.getConnection(function(err, connection) {\r\n \r\n        if (err) {\r\n            console.error(\"Dogodila se gre\u0161ka: \" + err);\r\n        }\r\n\r\n           var korisnik = { \r\n            k_ime: req.body.ime,\r\n            k_prezime: req.body.prezime\r\n            };    \r\n\r\n            connection.query('update korisnik SET ? where k_id = ?', [korisnik,  req.params.k_id],\r\n            function(err, rows) {\r\n                if (err) {\r\n                   return next(err);\r\n                } else {\r\n                    res.writeHead(200, {\r\n                        \"Content-Type\": \"application\/json\"\r\n                    });\r\n                    var result = {\r\n                        success: true,\r\n                        detail: rows\r\n                    }\r\n                    res.write(JSON.stringify(result));\r\n                    res.end();\r\n                }\r\n            });\r\n    });\r\n});<\/pre>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/01\/put-korisnik.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/01\/put-korisnik.gif\" alt=\"Ure\u0111ivanje jednog korisnika\" width=\"1139\" height=\"994\" class=\"aligncenter size-full wp-image-4620\" \/><\/a><\/p>\n<h3>Brisanje jednog korisnika<\/h3>\n<p><strong>DELETE<\/strong>  <span class=\"lang:default decode:true  crayon-inline \" >http:\/\/localhost:8080\/api\/korisnik\/:k_id<\/span> <\/p>\n<pre class=\"lang:js decode:true \" >apiRoutes.delete('\/korisnik\/:k_id', function(req, res, next){\r\n\r\npool.getConnection(function(err, connection) {\r\n \r\n        if (err) {\r\n            console.error(\"Dogodila se gre\u0161ka: \" + err);\r\n        }\r\n\r\n            connection.query('delete from korisnik where k_id = ?', [req.params.k_id], \r\n\r\n            function(err, rows) {\r\n                if (err) {\r\n                    return next(err);\r\n                } else {\r\n                    res.writeHead(200, {\r\n                        \"Content-Type\": \"application\/json\"\r\n                    });\r\n                    var result = {\r\n                        success: true\r\n                    }\r\n                    res.write(JSON.stringify(result));\r\n                    res.end();\r\n                }\r\n            });\r\n    });\r\n});<\/pre>\n<p><a href=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/01\/delete-korisnik.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/01\/delete-korisnik.gif\" alt=\"Brisanje jednog korisnika\" width=\"1139\" height=\"794\" class=\"aligncenter size-full wp-image-4622\" \/><\/a><\/p>\n<h2>Zaklju\u010dak<\/h2>\n<p>Ovo su osnove osnova kada je u pitanju izrada APi-ja. Nismo se dotaknuli pitanja sigurnosti, autentifikacije korisnika niti poku\u0161ali slati datoteke, npr. slike od korisnika, pomo\u0107u API-ja. Mo\u017eda o tome bude rije\u010di nekom drugom prilikom.<\/p>\n<p>Naravno da kada budete radili kompleksniji sustav ne\u0107ete sve rute staviti u server.js nego \u0107e svaka ruta imati svoju datoteku. <\/p>\n<p>Posjetite <strong><a href=\"https:\/\/github.com\/tomislavstankovic\/SImple-NodeJS-ExpressJS-Starter-API\" target=\"_blank\">GitHub<\/a><\/strong> i preuzmite projekt. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kroz ovaj blog post pokazati \u0107u kako napraviti jednostavan RESTful API koriste\u0107i Node.js i Express.js. Pomo\u0107u API-ja povezati \u0107emo se sa MySQL bazom, prikazati popis korisnika te urediti i brisati korisnike, a sve \u0107emo testirati pomo\u0107u Postmana. Uz pretpostavku da imate instaliran Node.js mo\u017eemo krenuti. Postavljanje projekta Kao i u pro\u0161lom blog postu, i ovdje &hellip; <a href=\"https:\/\/www.tomislavstankovic.com\/blog\/jednostavan-nodejs-expressjs-rest-api\/\" class=\"more-link\">Nastavi \u010ditati <span class=\"screen-reader-text\">Izrada RESTful API-ja koriste\u0107i Node.js i Express.js<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":4593,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[565,351],"tags":[376,375,378,377],"class_list":["post-4590","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-backend","category-razvoj","tag-api","tag-express-js","tag-node-js","tag-rest"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Izrada RESTful API-ja koriste\u0107i Node.js i Express.js - Tomislav Stankovi\u0107<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.tomislavstankovic.com\/blog\/jednostavan-nodejs-expressjs-rest-api\/\" \/>\n<meta property=\"og:locale\" content=\"hr_HR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Izrada RESTful API-ja koriste\u0107i Node.js i Express.js - Tomislav Stankovi\u0107\" \/>\n<meta property=\"og:description\" content=\"Kroz ovaj blog post pokazati \u0107u kako napraviti jednostavan RESTful API koriste\u0107i Node.js i Express.js. Pomo\u0107u API-ja povezati \u0107emo se sa MySQL bazom, prikazati popis korisnika te urediti i brisati korisnike, a sve \u0107emo testirati pomo\u0107u Postmana. Uz pretpostavku da imate instaliran Node.js mo\u017eemo krenuti. Postavljanje projekta Kao i u pro\u0161lom blog postu, i ovdje &hellip; Nastavi \u010ditati Izrada RESTful API-ja koriste\u0107i Node.js i Express.js\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.tomislavstankovic.com\/blog\/jednostavan-nodejs-expressjs-rest-api\/\" \/>\n<meta property=\"og:site_name\" content=\"Tomislav Stankovi\u0107\" \/>\n<meta property=\"article:published_time\" content=\"2017-01-08T20:06:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-01-05T17:58:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/01\/jednostavan-NodeJS-ExpressJS-REST-API.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"825\" \/>\n\t<meta property=\"og:image:height\" content=\"510\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Tomislav Stankovi\u0107\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Napisao\/la\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tomislav Stankovi\u0107\" \/>\n\t<meta name=\"twitter:label2\" content=\"Procijenjeno vrijeme \u010ditanja\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minuta\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/jednostavan-nodejs-expressjs-rest-api\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/jednostavan-nodejs-expressjs-rest-api\\\/\"},\"author\":{\"name\":\"Tomislav Stankovi\u0107\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\"},\"headline\":\"Izrada RESTful API-ja koriste\u0107i Node.js i Express.js\",\"datePublished\":\"2017-01-08T20:06:06+00:00\",\"dateModified\":\"2019-01-05T17:58:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/jednostavan-nodejs-expressjs-rest-api\\\/\"},\"wordCount\":426,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\"},\"image\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/jednostavan-nodejs-expressjs-rest-api\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/01\\\/jednostavan-NodeJS-ExpressJS-REST-API.jpg\",\"keywords\":[\"API\",\"Express.js\",\"Node.js\",\"REST\"],\"articleSection\":[\"Backend\",\"Razvoj\"],\"inLanguage\":\"hr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/jednostavan-nodejs-expressjs-rest-api\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/jednostavan-nodejs-expressjs-rest-api\\\/\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/jednostavan-nodejs-expressjs-rest-api\\\/\",\"name\":\"Izrada RESTful API-ja koriste\u0107i Node.js i Express.js - Tomislav Stankovi\u0107\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/jednostavan-nodejs-expressjs-rest-api\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/jednostavan-nodejs-expressjs-rest-api\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/01\\\/jednostavan-NodeJS-ExpressJS-REST-API.jpg\",\"datePublished\":\"2017-01-08T20:06:06+00:00\",\"dateModified\":\"2019-01-05T17:58:30+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/jednostavan-nodejs-expressjs-rest-api\\\/#breadcrumb\"},\"inLanguage\":\"hr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/jednostavan-nodejs-expressjs-rest-api\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"hr\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/jednostavan-nodejs-expressjs-rest-api\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/01\\\/jednostavan-NodeJS-ExpressJS-REST-API.jpg\",\"contentUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/01\\\/jednostavan-NodeJS-ExpressJS-REST-API.jpg\",\"width\":825,\"height\":510,\"caption\":\"Izrada jednostavnog RESTful API-ja koriste\u0107i Node.js i Express.js\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/jednostavan-nodejs-expressjs-rest-api\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Po\u010detna stranica\",\"item\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Izrada RESTful API-ja koriste\u0107i Node.js i Express.js\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/\",\"name\":\"Tomislav Stankovi\u0107\",\"description\":\"Sam svoj bloger\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"hr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/#\\\/schema\\\/person\\\/0329c549c57700034ea77f5d3d78396d\",\"name\":\"Tomislav Stankovi\u0107\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"hr\",\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/cropped-TomislavStankovic.jpg\",\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/cropped-TomislavStankovic.jpg\",\"contentUrl\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/cropped-TomislavStankovic.jpg\",\"width\":248,\"height\":165,\"caption\":\"Tomislav Stankovi\u0107\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/10\\\/cropped-TomislavStankovic.jpg\"},\"description\":\"Bloger \u0161irokog raspona interesa od kojih dio voli objaviti na ovom blogu. U neslobodno vrijeme Angular developer mobilnih i web aplikacija.\",\"sameAs\":[\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/tomislavstankovic\\\/\"],\"url\":\"https:\\\/\\\/www.tomislavstankovic.com\\\/blog\\\/author\\\/tomislavstankovic\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Izrada RESTful API-ja koriste\u0107i Node.js i Express.js - Tomislav Stankovi\u0107","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.tomislavstankovic.com\/blog\/jednostavan-nodejs-expressjs-rest-api\/","og_locale":"hr_HR","og_type":"article","og_title":"Izrada RESTful API-ja koriste\u0107i Node.js i Express.js - Tomislav Stankovi\u0107","og_description":"Kroz ovaj blog post pokazati \u0107u kako napraviti jednostavan RESTful API koriste\u0107i Node.js i Express.js. Pomo\u0107u API-ja povezati \u0107emo se sa MySQL bazom, prikazati popis korisnika te urediti i brisati korisnike, a sve \u0107emo testirati pomo\u0107u Postmana. Uz pretpostavku da imate instaliran Node.js mo\u017eemo krenuti. Postavljanje projekta Kao i u pro\u0161lom blog postu, i ovdje &hellip; Nastavi \u010ditati Izrada RESTful API-ja koriste\u0107i Node.js i Express.js","og_url":"https:\/\/www.tomislavstankovic.com\/blog\/jednostavan-nodejs-expressjs-rest-api\/","og_site_name":"Tomislav Stankovi\u0107","article_published_time":"2017-01-08T20:06:06+00:00","article_modified_time":"2019-01-05T17:58:30+00:00","og_image":[{"width":825,"height":510,"url":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/01\/jednostavan-NodeJS-ExpressJS-REST-API.jpg","type":"image\/jpeg"}],"author":"Tomislav Stankovi\u0107","twitter_card":"summary_large_image","twitter_misc":{"Napisao\/la":"Tomislav Stankovi\u0107","Procijenjeno vrijeme \u010ditanja":"5 minuta"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.tomislavstankovic.com\/blog\/jednostavan-nodejs-expressjs-rest-api\/#article","isPartOf":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/jednostavan-nodejs-expressjs-rest-api\/"},"author":{"name":"Tomislav Stankovi\u0107","@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d"},"headline":"Izrada RESTful API-ja koriste\u0107i Node.js i Express.js","datePublished":"2017-01-08T20:06:06+00:00","dateModified":"2019-01-05T17:58:30+00:00","mainEntityOfPage":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/jednostavan-nodejs-expressjs-rest-api\/"},"wordCount":426,"commentCount":2,"publisher":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d"},"image":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/jednostavan-nodejs-expressjs-rest-api\/#primaryimage"},"thumbnailUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/01\/jednostavan-NodeJS-ExpressJS-REST-API.jpg","keywords":["API","Express.js","Node.js","REST"],"articleSection":["Backend","Razvoj"],"inLanguage":"hr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.tomislavstankovic.com\/blog\/jednostavan-nodejs-expressjs-rest-api\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.tomislavstankovic.com\/blog\/jednostavan-nodejs-expressjs-rest-api\/","url":"https:\/\/www.tomislavstankovic.com\/blog\/jednostavan-nodejs-expressjs-rest-api\/","name":"Izrada RESTful API-ja koriste\u0107i Node.js i Express.js - Tomislav Stankovi\u0107","isPartOf":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/jednostavan-nodejs-expressjs-rest-api\/#primaryimage"},"image":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/jednostavan-nodejs-expressjs-rest-api\/#primaryimage"},"thumbnailUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/01\/jednostavan-NodeJS-ExpressJS-REST-API.jpg","datePublished":"2017-01-08T20:06:06+00:00","dateModified":"2019-01-05T17:58:30+00:00","breadcrumb":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/jednostavan-nodejs-expressjs-rest-api\/#breadcrumb"},"inLanguage":"hr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.tomislavstankovic.com\/blog\/jednostavan-nodejs-expressjs-rest-api\/"]}]},{"@type":"ImageObject","inLanguage":"hr","@id":"https:\/\/www.tomislavstankovic.com\/blog\/jednostavan-nodejs-expressjs-rest-api\/#primaryimage","url":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/01\/jednostavan-NodeJS-ExpressJS-REST-API.jpg","contentUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2017\/01\/jednostavan-NodeJS-ExpressJS-REST-API.jpg","width":825,"height":510,"caption":"Izrada jednostavnog RESTful API-ja koriste\u0107i Node.js i Express.js"},{"@type":"BreadcrumbList","@id":"https:\/\/www.tomislavstankovic.com\/blog\/jednostavan-nodejs-expressjs-rest-api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Po\u010detna stranica","item":"https:\/\/www.tomislavstankovic.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Izrada RESTful API-ja koriste\u0107i Node.js i Express.js"}]},{"@type":"WebSite","@id":"https:\/\/www.tomislavstankovic.com\/blog\/#website","url":"https:\/\/www.tomislavstankovic.com\/blog\/","name":"Tomislav Stankovi\u0107","description":"Sam svoj bloger","publisher":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.tomislavstankovic.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"hr"},{"@type":["Person","Organization"],"@id":"https:\/\/www.tomislavstankovic.com\/blog\/#\/schema\/person\/0329c549c57700034ea77f5d3d78396d","name":"Tomislav Stankovi\u0107","image":{"@type":"ImageObject","inLanguage":"hr","@id":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/10\/cropped-TomislavStankovic.jpg","url":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/10\/cropped-TomislavStankovic.jpg","contentUrl":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/10\/cropped-TomislavStankovic.jpg","width":248,"height":165,"caption":"Tomislav Stankovi\u0107"},"logo":{"@id":"https:\/\/www.tomislavstankovic.com\/blog\/wp-content\/uploads\/2019\/10\/cropped-TomislavStankovic.jpg"},"description":"Bloger \u0161irokog raspona interesa od kojih dio voli objaviti na ovom blogu. U neslobodno vrijeme Angular developer mobilnih i web aplikacija.","sameAs":["https:\/\/www.tomislavstankovic.com\/blog\/","https:\/\/www.linkedin.com\/in\/tomislavstankovic\/"],"url":"https:\/\/www.tomislavstankovic.com\/blog\/author\/tomislavstankovic\/"}]}},"_links":{"self":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts\/4590","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/comments?post=4590"}],"version-history":[{"count":33,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts\/4590\/revisions"}],"predecessor-version":[{"id":8318,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/posts\/4590\/revisions\/8318"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/media\/4593"}],"wp:attachment":[{"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/media?parent=4590"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/categories?post=4590"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tomislavstankovic.com\/blog\/wp-json\/wp\/v2\/tags?post=4590"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}