{"id":1937,"date":"2015-07-09T10:55:02","date_gmt":"2015-07-09T10:55:02","guid":{"rendered":"http:\/\/www.nikola-breznjak.com\/blog\/?p=1937"},"modified":"2015-07-31T09:54:24","modified_gmt":"2015-07-31T09:54:24","slug":"how-to-add-a-comment-field-to-mean-js-article-example","status":"publish","type":"post","link":"https:\/\/nikola-breznjak.com\/blog\/codeproject\/how-to-add-a-comment-field-to-mean-js-article-example\/","title":{"rendered":"How to add a comment field to MEAN.js Article example"},"content":{"rendered":"<h3><a href=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2015\/06\/MEAN_Grunt_604x270.png\" rel=\"lightbox[1937]\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1907\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2015\/06\/MEAN_Grunt_604x270.png\" alt=\"MEAN_Grunt_604x270\" width=\"604\" height=\"170\" srcset=\"https:\/\/nikola-breznjak.com\/blog\/wp-content\/uploads\/2015\/06\/MEAN_Grunt_604x270.png 604w, https:\/\/nikola-breznjak.com\/blog\/wp-content\/uploads\/2015\/06\/MEAN_Grunt_604x270-300x84.png 300w\" sizes=\"auto, (max-width: 604px) 100vw, 604px\" \/><\/a><\/h3>\n<p><em>If you happen to like the image above, and you&#8217;re thinking to yourself how cool it would look like as a sticker, take a look at a <a href=\"http:\/\/www.nikola-breznjak.com\/blog\/miscellaneou\/my-new-lenovo-apple-laptop-with-a-custom-hood\/\">few that I made<\/a>.<\/em><\/p>\n<h3>TL;DR<\/h3>\n<p>In my previous tutorial about the MEAN stack, I showed you\u00a0<a href=\"http:\/\/www.nikola-breznjak.com\/blog\/codeproject\/how-to-get-your-mean-stack-up-and-running-in-less-than-a-minute\/\">how to get your MEAN stack up and running in less than a minute<\/a>.\u00a0In this tutorial I&#8217;m going to show you how to add a comment field to an existing <a href=\"http:\/\/meanjs.org\/docs.html#article-example\">MEAN.js Article example<\/a>. You can see the finished application on\u00a0<a href=\"http:\/\/mean.nikola-dev.com\/\">http:\/\/mean.nikola-dev.com<\/a>, and\u00a0you can clone\u00a0the <a href=\"https:\/\/github.com\/Hitman666\/MEANjsArticleExampleAdvanced\">source on GitHub<\/a>.<\/p>\n<p>I actually answered the question <a href=\"http:\/\/stackoverflow.com\/questions\/31097159\/adding-comments-to-mean-js-articles\/31099005#31099005\">Adding comments to MEAN.JS articles<\/a>\u00a0on StackOverflow, and this posts is kind of an addition to that answer, with pictures (<em>everyone\u00a0likes pictures, right? \ud83d\ude09<\/em>).<\/p>\n<p>[toc]<\/p>\n<h3>Starting point<\/h3>\n<p>So, if you&#8217;ve followed the (a<em>h, yet again mentioned<\/em>) <a href=\"http:\/\/www.nikola-breznjak.com\/blog\/codeproject\/how-to-get-your-mean-stack-up-and-running-in-less-than-a-minute\/\">previous tutorial<\/a>\u00a0you have a running MEAN.js example on your <a href=\"https:\/\/www.digitalocean.com\/?refcode=974c9bc93d77\">DigitalOcean Droplet<\/a>, whose front page looks like the image below if you&#8217;re logged in. You can simply register via mail (I didn&#8217;t implement any other methods like Facebook, Google, LinkedIn or GitHub for this tutorial).<\/p>\n<p><a href=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2015\/06\/Screen-Shot-2015-06-28-at-14.32.35.png\" rel=\"lightbox[1937]\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1908\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2015\/06\/Screen-Shot-2015-06-28-at-14.32.35-1024x702.png\" alt=\"Screen Shot 2015-06-28 at 14.32.35\" width=\"604\" height=\"414\" srcset=\"https:\/\/nikola-breznjak.com\/blog\/wp-content\/uploads\/2015\/06\/Screen-Shot-2015-06-28-at-14.32.35-1024x702.png 1024w, https:\/\/nikola-breznjak.com\/blog\/wp-content\/uploads\/2015\/06\/Screen-Shot-2015-06-28-at-14.32.35-300x206.png 300w, https:\/\/nikola-breznjak.com\/blog\/wp-content\/uploads\/2015\/06\/Screen-Shot-2015-06-28-at-14.32.35.png 1148w\" sizes=\"auto, (max-width: 604px) 100vw, 604px\" \/><\/a><\/p>\n<p><em>Please note that yes, you can run this example locally on your computer too, but you would have to manually install the whole MEAN stack (namely MongoDB, Express.js and Node.js). If you wish to do so, you can take a look at the steps needed to do this from a rather popular tutorial <a href=\"https:\/\/hackhands.com\/how-to-get-started-on-the-mean-stack\/\">How to get started on the MEAN stack<\/a>. Rest of the tutorial, however, assumes you are testing this on <a href=\"https:\/\/www.digitalocean.com\/?refcode=974c9bc93d77\">DigitalOcean Droplet<\/a>.<\/em><\/p>\n<h3>How to add a subdomain for Nodejs application on DigitalOcean droplet<\/h3>\n<p>When I was preparing this post I bought a domain just for testing purposes called <a href=\"http:\/\/nikola-dev.com\">nikola-dev.com<\/a>\u00a0and I wanted to have Node.js apps running on this VPS (behind a NGINX running as proxy, as we set it up in previous tutorial) but that they would be accessible from different subdomains (for example <a href=\"http:\/\/mean.nikola-dev.com\">mean.nikola-dev.com<\/a>). Below are the steps I needed to take in order to make this happen:<\/p>\n<ol>\n<li>Buy a domain (clearly you have done so <a href=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2015\/06\/smileyGlasses.png\" rel=\"lightbox[1937]\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1759\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2015\/06\/smileyGlasses.png\" alt=\"smileyGlasses\" width=\"32\" height=\"32\" \/><\/a>)<\/li>\n<li>Edit the Nameserver information in the admin dashboard of your domain provider (where you bought the domain) to the following three records:<br \/>\nns1.digitalocean.com,\u00a0ns2.digitalocean.com,\u00a0ns3.digitalocean.com<\/li>\n<li>Add the domain on DigitalOcean DNS settings page:<br \/>\n<a href=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2015\/07\/digitalOcean_dns.jpg\" rel=\"lightbox[1937]\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1941\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2015\/07\/digitalOcean_dns.jpg\" alt=\"digitalOcean_dns\" width=\"1009\" height=\"415\" srcset=\"https:\/\/nikola-breznjak.com\/blog\/wp-content\/uploads\/2015\/07\/digitalOcean_dns.jpg 1009w, https:\/\/nikola-breznjak.com\/blog\/wp-content\/uploads\/2015\/07\/digitalOcean_dns-300x123.jpg 300w\" sizes=\"auto, (max-width: 1009px) 100vw, 1009px\" \/><\/a><\/li>\n<li>Delete <strong>\/etc\/nginx\/sites-enabled\/default<\/strong><\/li>\n<li>Create\u00a0<strong>\/etc\/nginx\/sites-available\/nikola-dev.com<\/strong>\u00a0file with the following content (this will be a simple single HTML file which will list the available test apps on this server):\n<pre class=\"lang:default decode:true\">server {\r\n    listen 80;\r\n    server_name nikola-dev.com;\r\n    root \/var\/www\/nikola-dev.com\/public_html;\r\n}<\/pre>\n<\/li>\n<li>Create\u00a0<strong>\/etc\/nginx\/sites-available\/mean.nikola-dev.com<\/strong>\u00a0file with the following content (this will serve the actual Node.js app that we&#8217;re building in this tutorial):\n<pre class=\"lang:default decode:true\">server {\r\n    listen 80;\r\n\r\n    server_name mean.nikola-dev.com;\r\n\r\n    location \/ {\r\n        proxy_pass http:\/\/127.0.0.1:3000;\r\n        proxy_http_version 1.1;\r\n        proxy_set_header Upgrade $http_upgrade;\r\n        proxy_set_header Connection 'upgrade';\r\n        proxy_set_header Host $host;\r\n        proxy_cache_bypass $http_upgrade;\r\n    }\r\n}<\/pre>\n<\/li>\n<li>Restart NGINX:\n<pre class=\"lang:default decode:true\">sudo service nginx restart<\/pre>\n<\/li>\n<\/ol>\n<h3>Adding a comment field to Article example<\/h3>\n<ol>\n<li>In the file <strong>app\/models\/article.server.model.js<\/strong>\u00a0add:\n<pre class=\"lang:default decode:true \">comment: {\r\n\ttype: String,\r\n\tdefault: '',\r\n\ttrim: true\r\n},<\/pre>\n<p>For the reference, the whole <strong>app\/models\/article.server.model.js<\/strong>\u00a0file contents should look like this:<\/p>\n<pre class=\"lang:default decode:true\">'use strict';\r\n\r\n\/**\r\n * Module dependencies.\r\n *\/\r\nvar mongoose = require('mongoose'),\r\n        Schema = mongoose.Schema;\r\n\r\n\/**\r\n * Article Schema\r\n *\/\r\nvar ArticleSchema = new Schema({\r\n        created: {\r\n                type: Date,\r\n                default: Date.now\r\n        },\r\n        title: {\r\n                type: String,\r\n                default: '',\r\n                trim: true,\r\n                required: 'Title cannot be blank'\r\n        },\r\n        content: {\r\n                type: String,\r\n                default: '',\r\n                trim: true\r\n        },\r\n        user: {\r\n                type: Schema.ObjectId,\r\n                ref: 'User'\r\n        },\r\n        comment: {\r\n                type: String,\r\n                default: '',\r\n                trim: true\r\n        }\r\n});\r\n\r\nmongoose.model('Article', ArticleSchema);<\/pre>\n<\/li>\n<li>In the file <strong>public\/modules\/articles\/views\/create-article.client.view.html<\/strong> add the following content before the <strong>submit<\/strong> button:\n<pre class=\"lang:default decode:true\">&lt;div class=\"form-group\"&gt;\r\n\t&lt;label class=\"control-label\" for=\"comment\"&gt;Comment&lt;\/label&gt;\r\n\t&lt;div class=\"controls\"&gt;\r\n\t\t&lt;textarea name=\"comment\" data-ng-model=\"comment\" id=\"comment\" class=\"form-control\" cols=\"30\" rows=\"10\" placeholder=\"Comment\"&gt;&lt;\/textarea&gt;\r\n\t&lt;\/div&gt;\r\n&lt;\/div&gt;<\/pre>\n<p>For the reference, the whole <strong>public\/modules\/articles\/views\/create-article.client.view.html<\/strong>\u00a0file contents should look like this:<\/p>\n<pre class=\"lang:default decode:true\">&lt;section data-ng-controller=\"ArticlesController\"&gt;\r\n        &lt;div class=\"page-header\"&gt;\r\n                &lt;h1&gt;New Article&lt;\/h1&gt;\r\n        &lt;\/div&gt;\r\n        &lt;div class=\"col-md-12\"&gt;\r\n                &lt;form name=\"articleForm\" class=\"form-horizontal\" data-ng-submit=\"create()\" novalidate&gt;\r\n                        &lt;fieldset&gt;\r\n                                &lt;div class=\"form-group\" ng-class=\"{ 'has-error': articleForm.title.$dirty &amp;&amp; articleForm.title.$invalid }\"&gt;\r\n                                        &lt;label class=\"control-label\" for=\"title\"&gt;Title&lt;\/label&gt;\r\n                                        &lt;div class=\"controls\"&gt;\r\n                                                &lt;input name=\"title\" type=\"text\" data-ng-model=\"title\" id=\"title\" class=\"form-control\" placeholder=\"Title\" required&gt;\r\n                                        &lt;\/div&gt;\r\n                                &lt;\/div&gt;\r\n                                &lt;div class=\"form-group\"&gt;\r\n                                        &lt;label class=\"control-label\" for=\"content\"&gt;Content&lt;\/label&gt;\r\n                                        &lt;div class=\"controls\"&gt;\r\n                                                &lt;textarea name=\"content\" data-ng-model=\"content\" id=\"content\" class=\"form-control\" cols=\"30\" rows=\"10\" placeholder=\"Content\"&gt;&lt;\/textarea&gt;\r\n                                        &lt;\/div&gt;\r\n                                &lt;\/div&gt;\r\n\r\n\t\t\t\t\t\t\t\t&lt;div class=\"form-group\"&gt;\r\n\t\t\t\t\t\t\t\t        &lt;label class=\"control-label\" for=\"comment\"&gt;Comment&lt;\/label&gt;\r\n\t\t\t\t\t\t\t\t        &lt;div class=\"controls\"&gt;\r\n\t\t\t\t\t\t\t\t                &lt;textarea name=\"comment\" data-ng-model=\"comment\" id=\"comment\" class=\"form-control\" cols=\"30\" rows=\"10\" placeholder=\"Comment\"&gt;&lt;\/textarea&gt;\r\n\t\t\t\t\t\t\t\t        &lt;\/div&gt;\r\n\t\t\t\t\t\t\t\t&lt;\/div&gt;\r\n\t\t\t\t\t\t\t\t\r\n                                &lt;div class=\"form-group\"&gt;\r\n                                        &lt;input type=\"submit\" class=\"btn btn-default\"&gt;\r\n                                &lt;\/div&gt;\r\n                                &lt;div data-ng-show=\"error\" class=\"text-danger\"&gt;\r\n                                        &lt;strong data-ng-bind=\"error\"&gt;&lt;\/strong&gt;\r\n                                &lt;\/div&gt;\r\n                        &lt;\/fieldset&gt;\r\n                &lt;\/form&gt;\r\n        &lt;\/div&gt;\r\n&lt;\/section&gt;<\/pre>\n<\/li>\n<li>In the file <strong>public\/modules\/articles\/controllers\/articles.client.controller.js<\/strong> adjust the <strong>create<\/strong> function to be:\n<pre class=\"lang:default decode:true\">var article = new Articles({\r\ntitle: this.title,\r\ncontent: this.content,\r\ncomment: this.comment\r\n});<\/pre>\n<p>For the reference, the whole <strong>public\/modules\/articles\/controllers\/articles.client.controller.js<\/strong>\u00a0file contents should look like this:<\/p>\n<pre class=\"lang:default decode:true\">'use strict';\r\n\r\nangular.module('articles').controller('ArticlesController', ['$scope', '$stateParams', '$location', 'Authentication', 'Articles',\r\n        function($scope, $stateParams, $location, Authentication, Articles) {\r\n                $scope.authentication = Authentication;\r\n\r\n                $scope.create = function() {\r\n                        var article = new Articles({\r\n                                title: this.title,\r\n                                content: this.content,\r\n                                comment: this.comment\r\n                        });\r\n                        article.$save(function(response) {\r\n                                $location.path('articles\/' + response._id);\r\n\r\n                                $scope.title = '';\r\n                                $scope.content = '';\r\n                        }, function(errorResponse) {\r\n                                $scope.error = errorResponse.data.message;\r\n                        });\r\n                };\r\n\r\n                $scope.remove = function(article) {\r\n                        if (article) {\r\n                                article.$remove();\r\n\r\n                                for (var i in $scope.articles) {\r\n                                        if ($scope.articles[i] === article) {\r\n                                                $scope.articles.splice(i, 1);\r\n                                        }\r\n                                }\r\n                        } else {\r\n                                $scope.article.$remove(function() {\r\n                                        $location.path('articles');\r\n                                });\r\n                        }\r\n                };\r\n\r\n                $scope.update = function() {\r\n                        var article = $scope.article;\r\n\r\n                        article.$update(function() {\r\n                                $location.path('articles\/' + article._id);\r\n                        }, function(errorResponse) {\r\n                                $scope.error = errorResponse.data.message;\r\n                        });\r\n                };\r\n\r\n                $scope.find = function() {\r\n                        $scope.articles = Articles.query();\r\n                };\r\n\r\n                $scope.findOne = function() {\r\n                        $scope.article = Articles.get({\r\n                                articleId: $stateParams.articleId\r\n                        });\r\n                };\r\n        }\r\n]);\r\n<\/pre>\n<\/li>\n<li>In the file <strong>public\/modules\/articles\/views\/view-article.client.view.html<\/strong> add this just before the closing <strong>section<\/strong> tag:\n<pre class=\"lang:default decode:true\">&lt;p data-ng-bind=\"article.comment\"&gt;&lt;\/p&gt;<\/pre>\n<p>For the reference, the whole <strong>public\/modules\/articles\/views\/view-article.client.view.html<\/strong>\u00a0file contents should look like this:<\/p>\n<pre class=\"lang:default decode:true\">&lt;section data-ng-controller=\"ArticlesController\" data-ng-init=\"findOne()\"&gt;\r\n        &lt;div class=\"page-header\"&gt;\r\n                &lt;h1 data-ng-bind=\"article.title\"&gt;&lt;\/h1&gt;\r\n        &lt;\/div&gt;\r\n        &lt;div class=\"pull-right\" data-ng-show=\"authentication.user._id == article.user._id\"&gt;\r\n                &lt;a class=\"btn btn-primary\" href=\"\/#!\/articles\/{{article._id}}\/edit\"&gt;\r\n                        &lt;i class=\"glyphicon glyphicon-edit\"&gt;&lt;\/i&gt;\r\n                &lt;\/a&gt;\r\n                &lt;a class=\"btn btn-primary\" data-ng-click=\"remove();\"&gt;\r\n                        &lt;i class=\"glyphicon glyphicon-trash\"&gt;&lt;\/i&gt;\r\n                &lt;\/a&gt;\r\n        &lt;\/div&gt;\r\n        &lt;small&gt;\r\n                &lt;em class=\"text-muted\"&gt;\r\n                        Posted on\r\n                        &lt;span data-ng-bind=\"article.created | date:'mediumDate'\"&gt;&lt;\/span&gt;\r\n                        by\r\n                        &lt;span data-ng-bind=\"article.user.displayName\"&gt;&lt;\/span&gt;\r\n                &lt;\/em&gt;\r\n        &lt;\/small&gt;\r\n        &lt;p class=\"lead\" data-ng-bind=\"article.content\"&gt;&lt;\/p&gt;\r\n        &lt;p data-ng-bind=\"article.comment\"&gt;&lt;\/p&gt;\r\n&lt;\/section&gt;<\/pre>\n<\/li>\n<li>This is it, now you have a new field <strong>comment<\/strong> for each article:<br \/>\n<a href=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2015\/07\/meanCommentAdding.jpg\" rel=\"lightbox[1937]\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1959\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2015\/07\/meanCommentAdding-1024x705.jpg\" alt=\"meanCommentAdding\" width=\"604\" height=\"416\" srcset=\"https:\/\/nikola-breznjak.com\/blog\/wp-content\/uploads\/2015\/07\/meanCommentAdding-1024x705.jpg 1024w, https:\/\/nikola-breznjak.com\/blog\/wp-content\/uploads\/2015\/07\/meanCommentAdding-300x207.jpg 300w, https:\/\/nikola-breznjak.com\/blog\/wp-content\/uploads\/2015\/07\/meanCommentAdding.jpg 1154w\" sizes=\"auto, (max-width: 604px) 100vw, 604px\" \/><\/a>Once added, you&#8217;ll see the comment in the article list:<a href=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2015\/07\/meanCommentAddedJPG.jpg\" rel=\"lightbox[1937]\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1958\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2015\/07\/meanCommentAddedJPG.jpg\" alt=\"meanCommentAddedJPG\" width=\"738\" height=\"252\" srcset=\"https:\/\/nikola-breznjak.com\/blog\/wp-content\/uploads\/2015\/07\/meanCommentAddedJPG.jpg 738w, https:\/\/nikola-breznjak.com\/blog\/wp-content\/uploads\/2015\/07\/meanCommentAddedJPG-300x102.jpg 300w\" sizes=\"auto, (max-width: 738px) 100vw, 738px\" \/><\/a><\/li>\n<li>What you should do now, and I hope it&#8217;s clear form these instructions here, is alter the <strong>editing<\/strong> part of the articles, so that they include the <strong>comment<\/strong> field.<\/li>\n<\/ol>\n<h3>Where to go from here?<\/h3>\n<p>This tutorial should have given you the basic understanding on how to add additional fields to the MEAN.js Article example, and you should be confident enough to starting adding your own fields and altering the example to your liking.<\/p>\n<p>In the next tutorial we&#8217;ll take a look at how to add Image CRUD module to MEAN.js application with a <strong>single<\/strong> Yeoman command (I will update the link here once the tutorial is finished).<\/p>\n<p>If you want to\u00a0learn more about the MEAN\u00a0stack, take a look at the blog2book <a href=\"https:\/\/leanpub.com\/meantodo\">Getting MEAN with MEMEs<\/a>\u00a0(<em>yes, you can download it for free, though a coffee would be nice\u00a0<a href=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2015\/06\/smileyGlasses.png\" rel=\"lightbox[1937]\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1759\" src=\"http:\/\/www.nikola-breznjak.com\/blog\/wp-content\/uploads\/2015\/06\/smileyGlasses.png\" alt=\"smileyGlasses\" width=\"32\" height=\"32\" \/><\/a><\/em>).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>If you happen to like the image above, and you&#8217;re thinking to yourself how cool it would look like as a sticker, take a look at a few&hellip;<\/p>\n","protected":false},"author":1,"featured_media":1907,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8,39],"tags":[],"class_list":["post-1937","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codeproject","category-mean"],"_links":{"self":[{"href":"https:\/\/nikola-breznjak.com\/blog\/wp-json\/wp\/v2\/posts\/1937","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nikola-breznjak.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nikola-breznjak.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nikola-breznjak.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nikola-breznjak.com\/blog\/wp-json\/wp\/v2\/comments?post=1937"}],"version-history":[{"count":5,"href":"https:\/\/nikola-breznjak.com\/blog\/wp-json\/wp\/v2\/posts\/1937\/revisions"}],"predecessor-version":[{"id":1992,"href":"https:\/\/nikola-breznjak.com\/blog\/wp-json\/wp\/v2\/posts\/1937\/revisions\/1992"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nikola-breznjak.com\/blog\/wp-json\/wp\/v2\/media\/1907"}],"wp:attachment":[{"href":"https:\/\/nikola-breznjak.com\/blog\/wp-json\/wp\/v2\/media?parent=1937"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nikola-breznjak.com\/blog\/wp-json\/wp\/v2\/categories?post=1937"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nikola-breznjak.com\/blog\/wp-json\/wp\/v2\/tags?post=1937"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}