{"id":2151,"date":"2025-09-11T09:25:26","date_gmt":"2025-09-11T09:25:26","guid":{"rendered":"https:\/\/vladislavkudriashev23.thkit.ee\/WP\/?page_id=2151"},"modified":"2025-09-18T10:10:49","modified_gmt":"2025-09-18T10:10:49","slug":"rest-api-demo-kaima-saamine","status":"publish","type":"page","link":"https:\/\/vladislavkudriashev23.thkit.ee\/WP\/rest-api-demo-kaima-saamine\/","title":{"rendered":"H1: REST API demo k\u00e4ima saamine"},"content":{"rendered":"\n<p>Me teeme rakenduse, kus saame lisada ja saada andmeid massiivist, kus on salvestatud \u201eWidgets\u201c.<\/p>\n\n\n\n<p>1. Loo t\u00f6\u00f6lauale kaust\u00a0<a href=\"https:\/\/moodle.edu.ee\/mod\/glossary\/showentry.php?eid=133143&amp;displayformat=dictionary\">rest<\/a>&#8211;<a href=\"https:\/\/moodle.edu.ee\/mod\/glossary\/showentry.php?eid=133127&amp;displayformat=dictionary\">api<\/a>\u00a0<br>2. K\u00e4ivita koodiredaktor (nt VS Code, WebStorm vms) ja ava see kaust projektina<br>3. Loo kausta fail index.js j\u00e4rgneva sisuga:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:clamp(16px, 1rem, 24px);font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#e1e4e8;--cbp-line-number-width:calc(2 * 0.6 * 1rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2f363c;color:#d3d7dd\">JavaScript<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#e1e4e8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>const express = require('express'); \/\/ impordib Express.js raamistiku, mis on populaarne Node.js baasil t\u00f6\u00f6tav raamistik API-de loomiseks.\nconst cors = require('cors'); \/\/ impordib cors paketi, mis v\u00f5imaldab lisada CORS p\u00e4iseid vastustele, mis lubab API-d kasutada brauserist, kui API server ja brauseris t\u00f6\u00f6tav klient ei asu samas domeenis.\nconst app = express(); \/\/ loob Expressi rakenduse eksemplari (objekt app).\n\napp.use(cors());        \/\/ Avoid CORS errors in browsers\napp.use(express.json()) \/\/ Populate req.body\n\nconst widgets = &#91;\n    { id: 1, name: \"Cizzbor\", price: 29.99 },\n    { id: 2, name: \"Woowo\", price: 26.99 },\n    { id: 3, name: \"Crazlinger\", price: 59.99 },\n&#93; \n\/\/ defineerivad massiivi nimega widgets, mis sisaldab kolme elementi \u2014 objekte, millest iga\u00fchel on atribuudid id, name ja price.\n\/\/ Widget on \u00fcldine nimetus n\u00e4idisandmete esindamiseks. N\u00e4iteks filmide andmebaasi puhul kasutaksime s\u00f5na movie asemel widget.\n\n\napp.get('\/widgets', (req, res) => {\n    res.send(widgets)\n})\n\napp.get('\/widgets\/:id', (req, res) => {\n    if (typeof widgets&#91;req.params.id - 1&#93; === 'undefined') {\n        return res.status(404).send({ error: \"Widget not found\" })\n    }\n    res.send(widgets&#91;req.params.id - 1&#93;)\n})\n\napp.post('\/widgets', (req, res) => {\n    if (!req.body.name || !req.body.price) {\n        return res.status(400).send({ error: 'One or all params are missing' })\n    }\n    let newWidget = {\n        id: widgets.length + 1,\n        price: req.body.price,\n        name: req.body.name\n    }\n    widgets.push(newWidget)\n    res.status(201).location('localhost:8080\/widgets\/' + (widgets.length - 1)).send(\n        newWidget\n    )\n})\n\/\/ m\u00e4\u00e4ratlevad l\u00f5pp-punkti POST \/widgets, mis lisab widgets massiivi uue elemendi.\n\/\/ saadavad p\u00e4ringu edukal t\u00f6\u00f6tlemisel vastuseks staatuse 201.\n\n\/\/ Kustutamine\napp.delete('\/widgets\/:id', (req, res) => {\n    if (typeof widgets&#91;req.params.id - 1&#93; === 'undefined') {\n        return res.status(404).send({ error: \"Widget not found\"})\n    }\n    widgets.splice(req.params.id - 1, 1)\n    res.status(204).json({success: true})\n})\n\napp.listen(8080, () => {\n    console.log(`API up at: http:\/\/localhost:8080`)\n})\n\n\/\/ k\u00e4ivitavad meetodi listen(), mis alustab serveri kuulamist pordil 8080. Valikulise teise argumendina prinditakse konsooli teade, millisel aadressil rakendus k\u00e4ttesaadav on.<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki github-dark\" style=\"background-color: #24292e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">const<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">express<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">require<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&#39;express&#39;<\/span><span style=\"color: #E1E4E8\">); <\/span><span style=\"color: #6A737D\">\/\/ impordib Express.js raamistiku, mis on populaarne Node.js baasil t\u00f6\u00f6tav raamistik API-de loomiseks.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">const<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">cors<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">require<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&#39;cors&#39;<\/span><span style=\"color: #E1E4E8\">); <\/span><span style=\"color: #6A737D\">\/\/ impordib cors paketi, mis v\u00f5imaldab lisada CORS p\u00e4iseid vastustele, mis lubab API-d kasutada brauserist, kui API server ja brauseris t\u00f6\u00f6tav klient ei asu samas domeenis.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">const<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">app<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #B392F0\">express<\/span><span style=\"color: #E1E4E8\">(); <\/span><span style=\"color: #6A737D\">\/\/ loob Expressi rakenduse eksemplari (objekt app).<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">app.<\/span><span style=\"color: #B392F0\">use<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #B392F0\">cors<\/span><span style=\"color: #E1E4E8\">());        <\/span><span style=\"color: #6A737D\">\/\/ Avoid CORS errors in browsers<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">app.<\/span><span style=\"color: #B392F0\">use<\/span><span style=\"color: #E1E4E8\">(express.<\/span><span style=\"color: #B392F0\">json<\/span><span style=\"color: #E1E4E8\">()) <\/span><span style=\"color: #6A737D\">\/\/ Populate req.body<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">const<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">widgets<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> &#91;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    { id: <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">, name: <\/span><span style=\"color: #9ECBFF\">&quot;Cizzbor&quot;<\/span><span style=\"color: #E1E4E8\">, price: <\/span><span style=\"color: #79B8FF\">29.99<\/span><span style=\"color: #E1E4E8\"> },<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    { id: <\/span><span style=\"color: #79B8FF\">2<\/span><span style=\"color: #E1E4E8\">, name: <\/span><span style=\"color: #9ECBFF\">&quot;Woowo&quot;<\/span><span style=\"color: #E1E4E8\">, price: <\/span><span style=\"color: #79B8FF\">26.99<\/span><span style=\"color: #E1E4E8\"> },<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    { id: <\/span><span style=\"color: #79B8FF\">3<\/span><span style=\"color: #E1E4E8\">, name: <\/span><span style=\"color: #9ECBFF\">&quot;Crazlinger&quot;<\/span><span style=\"color: #E1E4E8\">, price: <\/span><span style=\"color: #79B8FF\">59.99<\/span><span style=\"color: #E1E4E8\"> },<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">&#93; <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">\/\/ defineerivad massiivi nimega widgets, mis sisaldab kolme elementi \u2014 objekte, millest iga\u00fchel on atribuudid id, name ja price.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">\/\/ Widget on \u00fcldine nimetus n\u00e4idisandmete esindamiseks. N\u00e4iteks filmide andmebaasi puhul kasutaksime s\u00f5na movie asemel widget.<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">app.<\/span><span style=\"color: #B392F0\">get<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&#39;\/widgets&#39;<\/span><span style=\"color: #E1E4E8\">, (<\/span><span style=\"color: #FFAB70\">req<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #FFAB70\">res<\/span><span style=\"color: #E1E4E8\">) <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    res.<\/span><span style=\"color: #B392F0\">send<\/span><span style=\"color: #E1E4E8\">(widgets)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">})<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">app.<\/span><span style=\"color: #B392F0\">get<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&#39;\/widgets\/:id&#39;<\/span><span style=\"color: #E1E4E8\">, (<\/span><span style=\"color: #FFAB70\">req<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #FFAB70\">res<\/span><span style=\"color: #E1E4E8\">) <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> (<\/span><span style=\"color: #F97583\">typeof<\/span><span style=\"color: #E1E4E8\"> widgets&#91;req.params.id <\/span><span style=\"color: #F97583\">-<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">&#93; <\/span><span style=\"color: #F97583\">===<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&#39;undefined&#39;<\/span><span style=\"color: #E1E4E8\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> res.<\/span><span style=\"color: #B392F0\">status<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #79B8FF\">404<\/span><span style=\"color: #E1E4E8\">).<\/span><span style=\"color: #B392F0\">send<\/span><span style=\"color: #E1E4E8\">({ error: <\/span><span style=\"color: #9ECBFF\">&quot;Widget not found&quot;<\/span><span style=\"color: #E1E4E8\"> })<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    res.<\/span><span style=\"color: #B392F0\">send<\/span><span style=\"color: #E1E4E8\">(widgets&#91;req.params.id <\/span><span style=\"color: #F97583\">-<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">&#93;)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">})<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">app.<\/span><span style=\"color: #B392F0\">post<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&#39;\/widgets&#39;<\/span><span style=\"color: #E1E4E8\">, (<\/span><span style=\"color: #FFAB70\">req<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #FFAB70\">res<\/span><span style=\"color: #E1E4E8\">) <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> (<\/span><span style=\"color: #F97583\">!<\/span><span style=\"color: #E1E4E8\">req.body.name <\/span><span style=\"color: #F97583\">||<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">!<\/span><span style=\"color: #E1E4E8\">req.body.price) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> res.<\/span><span style=\"color: #B392F0\">status<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #79B8FF\">400<\/span><span style=\"color: #E1E4E8\">).<\/span><span style=\"color: #B392F0\">send<\/span><span style=\"color: #E1E4E8\">({ error: <\/span><span style=\"color: #9ECBFF\">&#39;One or all params are missing&#39;<\/span><span style=\"color: #E1E4E8\"> })<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">let<\/span><span style=\"color: #E1E4E8\"> newWidget <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        id: widgets.<\/span><span style=\"color: #79B8FF\">length<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">+<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        price: req.body.price,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        name: req.body.name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    widgets.<\/span><span style=\"color: #B392F0\">push<\/span><span style=\"color: #E1E4E8\">(newWidget)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    res.<\/span><span style=\"color: #B392F0\">status<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #79B8FF\">201<\/span><span style=\"color: #E1E4E8\">).<\/span><span style=\"color: #B392F0\">location<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&#39;localhost:8080\/widgets\/&#39;<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">+<\/span><span style=\"color: #E1E4E8\"> (widgets.<\/span><span style=\"color: #79B8FF\">length<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #F97583\">-<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">)).<\/span><span style=\"color: #B392F0\">send<\/span><span style=\"color: #E1E4E8\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        newWidget<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">})<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">\/\/ m\u00e4\u00e4ratlevad l\u00f5pp-punkti POST \/widgets, mis lisab widgets massiivi uue elemendi.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">\/\/ saadavad p\u00e4ringu edukal t\u00f6\u00f6tlemisel vastuseks staatuse 201.<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">\/\/ Kustutamine<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">app.<\/span><span style=\"color: #B392F0\">delete<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">&#39;\/widgets\/:id&#39;<\/span><span style=\"color: #E1E4E8\">, (<\/span><span style=\"color: #FFAB70\">req<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #FFAB70\">res<\/span><span style=\"color: #E1E4E8\">) <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    <\/span><span style=\"color: #F97583\">if<\/span><span style=\"color: #E1E4E8\"> (<\/span><span style=\"color: #F97583\">typeof<\/span><span style=\"color: #E1E4E8\"> widgets&#91;req.params.id <\/span><span style=\"color: #F97583\">-<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">&#93; <\/span><span style=\"color: #F97583\">===<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #9ECBFF\">&#39;undefined&#39;<\/span><span style=\"color: #E1E4E8\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #E1E4E8\"> res.<\/span><span style=\"color: #B392F0\">status<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #79B8FF\">404<\/span><span style=\"color: #E1E4E8\">).<\/span><span style=\"color: #B392F0\">send<\/span><span style=\"color: #E1E4E8\">({ error: <\/span><span style=\"color: #9ECBFF\">&quot;Widget not found&quot;<\/span><span style=\"color: #E1E4E8\">})<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    widgets.<\/span><span style=\"color: #B392F0\">splice<\/span><span style=\"color: #E1E4E8\">(req.params.id <\/span><span style=\"color: #F97583\">-<\/span><span style=\"color: #E1E4E8\"> <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">, <\/span><span style=\"color: #79B8FF\">1<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    res.<\/span><span style=\"color: #B392F0\">status<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #79B8FF\">204<\/span><span style=\"color: #E1E4E8\">).<\/span><span style=\"color: #B392F0\">json<\/span><span style=\"color: #E1E4E8\">({success: <\/span><span style=\"color: #79B8FF\">true<\/span><span style=\"color: #E1E4E8\">})<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">})<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">app.<\/span><span style=\"color: #B392F0\">listen<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #79B8FF\">8080<\/span><span style=\"color: #E1E4E8\">, () <\/span><span style=\"color: #F97583\">=&gt;<\/span><span style=\"color: #E1E4E8\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">    console.<\/span><span style=\"color: #B392F0\">log<\/span><span style=\"color: #E1E4E8\">(<\/span><span style=\"color: #9ECBFF\">`API up at: http:\/\/localhost:8080`<\/span><span style=\"color: #E1E4E8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #E1E4E8\">})<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A737D\">\/\/ k\u00e4ivitavad meetodi listen(), mis alustab serveri kuulamist pordil 8080. Valikulise teise argumendina prinditakse konsooli teade, millisel aadressil rakendus k\u00e4ttesaadav on.<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Sisestame konsolis need commands ja k\u00e4ivitame<\/p>\n\n\n\n<p><code>npm install express cors<br>node index.js<\/code><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">HTTP ( POSTMAN )<\/h2>\n\n\n\n<p>Avame VS Code ja leiame Postman&#8217;i ja alla laadime<\/p>\n\n\n\n<figure class=\"wp-block-image size-large wp-duotone-grayscale\"><img decoding=\"async\" src=\"https:\/\/aleksandermilisenko23.thkit.ee\/wp\/wp-content\/uploads\/2025\/09\/E264ACB5-D91E-4AEF-BB72-EEBE5A96FFBF-1024x263.png\" alt=\"\" class=\"wp-image-1793\"\/><\/figure>\n\n\n\n<p>Loome GET&#8217;i p\u00e4ring andmete widget&#8217;i n\u00e4itamiseks <\/p>\n\n\n\n<figure class=\"wp-block-image size-large wp-duotone-grayscale\"><img decoding=\"async\" src=\"https:\/\/aleksandermilisenko23.thkit.ee\/wp\/wp-content\/uploads\/2025\/09\/0421C3F5-EF4A-4282-B122-E4AB4C94E80D-1024x278.png\" alt=\"\" class=\"wp-image-1796\"\/><\/figure>\n\n\n\n<p>Loome GET&#8217;i p\u00e4ring andmete widget&#8217;i n\u00e4itamiseks valitud id<\/p>\n\n\n\n<figure class=\"wp-block-image size-full wp-duotone-grayscale\"><img decoding=\"async\" src=\"https:\/\/aleksandermilisenko23.thkit.ee\/wp\/wp-content\/uploads\/2025\/09\/A4A64BC8-252D-4687-A5D9-D0F035E40FF4.png\" alt=\"\" class=\"wp-image-1798\"\/><\/figure>\n\n\n\n<p>Loome POST&#8217;i p\u00e4ring widget&#8217;i loomiseks<\/p>\n\n\n\n<p>( Valime body&#8217;is &#8220;raw&#8221; ja valime &#8220;JSON&#8221; ja sisestame andmete )<\/p>\n\n\n\n<figure class=\"wp-block-image size-full wp-duotone-grayscale\"><img decoding=\"async\" src=\"https:\/\/aleksandermilisenko23.thkit.ee\/wp\/wp-content\/uploads\/2025\/09\/9BD518DC-3016-4524-9EE7-6E762FB651AF.png\" alt=\"\" class=\"wp-image-1799\"\/><\/figure>\n\n\n\n<p>Loome DELETE p\u00e4ring widget&#8217;i kustutamiseks<\/p>\n\n\n\n<figure class=\"wp-block-image size-full wp-duotone-grayscale\"><img decoding=\"async\" src=\"https:\/\/aleksandermilisenko23.thkit.ee\/wp\/wp-content\/uploads\/2025\/09\/11A8691E-FBD9-43C2-ACE5-BE96AA0E4334.png\" alt=\"\" class=\"wp-image-1800\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full wp-duotone-grayscale\"><img decoding=\"async\" src=\"https:\/\/aleksandermilisenko23.thkit.ee\/wp\/wp-content\/uploads\/2025\/09\/2AACE03F-7BCD-4F70-A2DA-B7E82C145139.png\" alt=\"\" class=\"wp-image-1801\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Kokkuv\u00f5tte<\/h2>\n\n\n\n<p>K\u00f5ik kasutatud p\u00e4ringud t\u00f6\u00f6tavad ( GET, POST, DELETE )<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Me teeme rakenduse, kus saame lisada ja saada andmeid massiivist, kus on salvestatud \u201eWidgets\u201c. 1. Loo t\u00f6\u00f6lauale kaust\u00a0rest&#8211;api\u00a02. K\u00e4ivita koodiredaktor (nt VS Code, WebStorm vms) ja ava see kaust projektina3. Loo kausta fail index.js j\u00e4rgneva sisuga: Sisestame konsolis need commands ja k\u00e4ivitame npm install express corsnode index.js HTTP ( POSTMAN ) Avame VS Code ja [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2151","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/vladislavkudriashev23.thkit.ee\/WP\/wp-json\/wp\/v2\/pages\/2151","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vladislavkudriashev23.thkit.ee\/WP\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/vladislavkudriashev23.thkit.ee\/WP\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/vladislavkudriashev23.thkit.ee\/WP\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vladislavkudriashev23.thkit.ee\/WP\/wp-json\/wp\/v2\/comments?post=2151"}],"version-history":[{"count":9,"href":"https:\/\/vladislavkudriashev23.thkit.ee\/WP\/wp-json\/wp\/v2\/pages\/2151\/revisions"}],"predecessor-version":[{"id":2297,"href":"https:\/\/vladislavkudriashev23.thkit.ee\/WP\/wp-json\/wp\/v2\/pages\/2151\/revisions\/2297"}],"wp:attachment":[{"href":"https:\/\/vladislavkudriashev23.thkit.ee\/WP\/wp-json\/wp\/v2\/media?parent=2151"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}