{"id":1111,"date":"2017-10-14T05:12:10","date_gmt":"2017-10-14T02:12:10","guid":{"rendered":"https:\/\/community.virtono.com\/?p=1111"},"modified":"2020-06-10T16:53:19","modified_gmt":"2020-06-10T13:53:19","slug":"baucis","status":"publish","type":"post","link":"https:\/\/www.virtono.com\/community\/tutorial-how-to\/baucis\/","title":{"rendered":"baucis"},"content":{"rendered":"<header class=\"entry-header\"><\/header>\n<div class=\"entry-content\">\n<h3 id=\"seriesName\">Series:\u00a0Introduction to the MEAN Stack<\/h3>\n<ul id=\"seriesList\">\n<li><a href=\"https:\/\/wp.me\/p7ISfL-hs\" target=\"_blank\" rel=\"noopener\">Part 1: Definition of the MEAN stack<\/a><\/li>\n<li><a href=\"https:\/\/wp.me\/p7ISfL-hz\" target=\"_blank\" rel=\"noopener\">Part 2:\u00a0Setup of the MEAN stack<\/a><\/li>\n<li><a href=\"https:\/\/wp.me\/p7ISfL-hC\" target=\"_blank\" rel=\"noopener\">Part 3:\u00a0Node.js<\/a><\/li>\n<li><a href=\"https:\/\/wp.me\/s7ISfL-npm\" target=\"_blank\" rel=\"noopener\">Part 4:\u00a0npm<\/a><\/li>\n<li><a href=\"https:\/\/wp.me\/s7ISfL-connect\" target=\"_blank\" rel=\"noopener\">Part 5:\u00a0Connect<\/a><\/li>\n<li><a href=\"https:\/\/wp.me\/s7ISfL-express\" target=\"_blank\" rel=\"noopener\">Part 6:\u00a0Express<\/a><\/li>\n<li><a href=\"https:\/\/wp.me\/s7ISfL-mongodb\" target=\"_blank\" rel=\"noopener\">Part 7:\u00a0MongoDB<\/a><\/li>\n<li><a href=\"https:\/\/wp.me\/s7ISfL-mongodb\" target=\"_blank\" rel=\"noopener\">Part 8:\u00a0Mongoose<\/a><\/li>\n<li><a href=\"https:\/\/wp.me\/s7ISfL-rest\" target=\"_blank\" rel=\"noopener\">Part 9:\u00a0REST<\/a><\/li>\n<li><a href=\"https:\/\/wp.me\/s7ISfL-baucis\" target=\"_blank\" rel=\"noopener\">Part 10:\u00a0Baucis<\/a><\/li>\n<li><a href=\"https:\/\/wp.me\/s7ISfL-bower\" target=\"_blank\" rel=\"noopener\">Part 11:\u00a0Bower<\/a><\/li>\n<li><a href=\"https:\/\/wp.me\/p7ISfL-i1\" target=\"_blank\" rel=\"noopener\">Part 12:\u00a0AngularJS<\/a><\/li>\n<li><a href=\"https:\/\/wp.me\/p7ISfL-i4\" target=\"_blank\" rel=\"noopener\">Part 13:\u00a0Restangular<\/a><\/li>\n<\/ul>\n<p>In today&#8217;s article, we practically apply our theoretical knowledge about REST.\u00a0To this end, I present\u00a0Baucis\u00a0, which quickly and easily generates a complete REST API.<span id=\"more-3644\"><\/span><\/p>\n<p>Baucis is a framework that applies the concept of REST to Mongoose schemas and provides them as Express Middleware.\u00a0First you should install your Baucis.\u00a0The most recent version at the time of writing is 0.6.17:<\/p>\n<div>\n<div class=\"codecolorer-container powershell default\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"line-numbers\">\n<div>1<\/div>\n<\/td>\n<td>\n<div class=\"powershell codecolorer\">$ npm install baucis<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>The use of Baucis is simple.\u00a0You just need to assign a Mongoose scheme to a URL.\u00a0Subsequently, the REST API is disclosed as middleware via Express.\u00a0The code looks as follows:<\/p>\n<div class=\"codecolorer-container javascript default\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"line-numbers\">\n<div>1<br \/>\n2<br \/>\n3<br \/>\n4<br \/>\n5<br \/>\n6<br \/>\n7<br \/>\n8<br \/>\n9<br \/>\n10<br \/>\n11<br \/>\n12<br \/>\n13<br \/>\n14<br \/>\n15<br \/>\n16<br \/>\n17<br \/>\n18<br \/>\n19<br \/>\n20<\/div>\n<\/td>\n<td>\n<div class=\"javascript codecolorer\"><span class=\"kw2\">var<\/span>\u00a0mongoose\u00a0<span class=\"sy0\">=<\/span>\u00a0require\u00a0<span class=\"br0\">(\u00a0<\/span><span class=\"st0\">&#8216;mongoose&#8217;\u00a0<\/span><span class=\"br0\">)\u00a0<\/span><span class=\"sy0\">;\u00a0<\/span><br \/>\n<span class=\"kw2\">var<\/span>\u00a0baucis\u00a0<span class=\"sy0\">=<\/span>\u00a0require\u00a0<span class=\"br0\">(\u00a0<\/span><span class=\"st0\">&#8216;baucis&#8217;\u00a0<\/span><span class=\"br0\">)\u00a0<\/span><span class=\"sy0\">;\u00a0<\/span><br \/>\n<span class=\"kw2\">var<\/span>\u00a0express\u00a0<span class=\"sy0\">=<\/span>\u00a0require\u00a0<span class=\"br0\">(\u00a0<\/span><span class=\"st0\">&#8216;express&#8217;\u00a0<\/span><span class=\"br0\">)\u00a0<\/span><span class=\"sy0\">;\u00a0<\/span>mongoose.\u00a0<span class=\"me1\">connect\u00a0<\/span><span class=\"br0\">(\u00a0<\/span><span class=\"st0\">&#8216;mongodb: \/\/ localhost: 27017 \/ todo-db&#8217;\u00a0<\/span><span class=\"br0\">)\u00a0<\/span><span class=\"sy0\">;\u00a0<\/span><\/p>\n<p><span class=\"kw2\">var<\/span>\u00a0TodoSchema\u00a0<span class=\"sy0\">=\u00a0<\/span><span class=\"kw2\">new<\/span>\u00a0mongoose.\u00a0<span class=\"me1\">Schema\u00a0<\/span><span class=\"br0\">(\u00a0<\/span><span class=\"br0\">{<\/span><br \/>\ntitle\u00a0<span class=\"sy0\">:\u00a0<\/span><span class=\"br0\">{<\/span>\u00a0type\u00a0<span class=\"sy0\">:<\/span>\u00a0String\u00a0<span class=\"sy0\">,\u00a0<\/span><span class=\"kw2\">default\u00a0<\/span><span class=\"sy0\">:\u00a0<\/span><span class=\"st0\">&#8221;<\/span>\u00a0<span class=\"br0\">}\u00a0<\/span><span class=\"sy0\">,<\/span><br \/>\ncompleted\u00a0<span class=\"sy0\">:\u00a0<\/span><span class=\"br0\">{<\/span>\u00a0type\u00a0<span class=\"sy0\">:<\/span>\u00a0Boolean\u00a0<span class=\"sy0\">,\u00a0<\/span><span class=\"kw2\">default\u00a0<\/span><span class=\"sy0\">:\u00a0<\/span><span class=\"kw2\">false\u00a0<\/span><span class=\"br0\">}\u00a0<\/span><br \/>\n<span class=\"br0\">}\u00a0<\/span><span class=\"br0\">)\u00a0<\/span><span class=\"sy0\">;\u00a0<\/span><br \/>\nmongoose.\u00a0<span class=\"me1\">model\u00a0<\/span><span class=\"br0\">(\u00a0<\/span><span class=\"st0\">&#8216;todo&#8217;\u00a0<\/span><span class=\"sy0\">,<\/span>\u00a0TodoSchema\u00a0<span class=\"br0\">)\u00a0<\/span><span class=\"sy0\">;\u00a0<\/span><\/p>\n<p>baucis.\u00a0<span class=\"me1\">rest\u00a0<\/span><span class=\"br0\">(\u00a0<\/span><span class=\"br0\">{<\/span><br \/>\nsingular\u00a0<span class=\"sy0\">:\u00a0<\/span><span class=\"st0\">&#8216;todo&#8217;\u00a0<\/span><span class=\"sy0\">,<\/span><br \/>\nplural\u00a0<span class=\"sy0\">:\u00a0<\/span><span class=\"st0\">&#8216;todos&#8217;\u00a0<\/span><br \/>\n<span class=\"br0\">}\u00a0<\/span><span class=\"br0\">)\u00a0<\/span><span class=\"sy0\">;\u00a0<\/span><\/p>\n<p>express\u00a0<span class=\"br0\">(\u00a0<\/span><span class=\"br0\">)<\/span><br \/>\n.\u00a0<span class=\"kw2\">use\u00a0<\/span><span class=\"br0\">(\u00a0<\/span><span class=\"st0\">&#8216;\/ api&#8217;\u00a0<\/span><span class=\"sy0\">,<\/span>\u00a0baucis\u00a0<span class=\"br0\">(\u00a0<\/span><span class=\"br0\">)\u00a0<\/span><span class=\"br0\">)<\/span><br \/>\n.\u00a0<span class=\"me1\">list<\/span><span class=\"br0\">(\u00a0<\/span><span class=\"nu0\">1337\u00a0<\/span><span class=\"sy0\">,\u00a0<\/span><span class=\"st0\">&#8216;127.0.0.1&#8217;\u00a0<\/span><span class=\"br0\">)\u00a0<\/span><span class=\"sy0\">;<\/span><\/p>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<div>\n<p>As a schema, we define Todos consisting of a string called\u00a0<code class=\"codecolorer javascript default\"><span class=\"javascript\">title<\/span><\/code>\u00a0and a Boolean named\u00a0<code class=\"codecolorer javascript default\"><span class=\"javascript\">completed<\/span><\/code>to indicate whether the Todo has been solved or not.\u00a0The scheme is\u00a0<code class=\"codecolorer javascript default\"><span class=\"javascript\">todo<\/span><\/code>\u00a0called.\u00a0As far as there is no change to the previous example except that we use a field with the type\u00a0\u00a0<code class=\"codecolorer javascript default\"><span class=\"javascript\">Boolean<\/span><\/code>which\u00a0<code class=\"codecolorer javascript default\"><span class=\"javascript\"><span class=\"kw2\">false<\/span><\/span><\/code>is\u00a0automatic when creating a new Todos\u00a0\u00a0.\u00a0Subsequently, the method transfers\u00a0\u00a0the CRUD functionality to the schema\u00a0\u00a0.\u00a0This method accepts a configuration object whose value for the field must\u00a0\u00a0correspond exactly to the name of the corresponding schema.\u00a0The value for the field\u00a0\u00a0is set automatically and plays a role at the later URL for the REST API.\u00a0Since Baucis in this case from<code class=\"codecolorer javascript default\"><span class=\"javascript\">baucis.<span class=\"me1\">rest<\/span><\/span><\/code><code class=\"codecolorer javascript default\"><span class=\"javascript\">todo<\/span><\/code><code class=\"codecolorer javascript default\"><span class=\"javascript\">singular<\/span><\/code><code class=\"codecolorer javascript default\"><span class=\"javascript\">plural<\/span><\/code><code class=\"codecolorer javascript default\"><span class=\"javascript\">todo<\/span><\/code>\u00a0falsely\u00a0<code class=\"codecolorer javascript default\"><span class=\"javascript\">todoes<\/span><\/code>\u00a0makes\u00a0the plural\u00a0, I manually set the right plural form\u00a0<code class=\"codecolorer javascript default\"><span class=\"javascript\">todos<\/span><\/code>.<\/p>\n<p>The only middleware that\u00a0\u00a0uses the route prefix\u00a0\u00a0is used.\u00a0The prefix is freely selectable, but\u00a0\u00a0is a frequently used prefix for accessing the REST API.\u00a0The middleware\u00a0\u00a0now allows\u00a0\u00a0to control\u00a0the previously\u00a0exposed Mongoose schema via a REST API.<code class=\"codecolorer javascript default\"><span class=\"javascript\">baucis<span class=\"br0\">(<\/span><span class=\"br0\">)<\/span><\/span><\/code><code class=\"codecolorer javascript default\"><span class=\"javascript\"><span class=\"sy0\">\/<\/span>api<\/span><\/code><code class=\"codecolorer javascript default\"><span class=\"javascript\"><span class=\"sy0\">\/<\/span>api<\/span><\/code><code class=\"codecolorer javascript default\"><span class=\"javascript\">baucis<span class=\"br0\">(<\/span><span class=\"br0\">)<\/span><\/span><\/code><code class=\"codecolorer javascript default\"><span class=\"javascript\">baucis.<span class=\"me1\">rest<\/span><\/span><\/code><\/p>\n<p>If you\u00a0call http:\/\/127.0.0.1:1337\/api\/todos\u00a0in the browser, you will get an empty array (&#8220;[]&#8221;).\u00a0<code class=\"codecolorer javascript default\"><span class=\"javascript\">todos<\/span><\/code>\u00a0the predefined plural form of\u00a0<code class=\"codecolorer javascript default\"><span class=\"javascript\">todo<\/span><\/code>\u00a0and the empty array means that the call was correct but no document\u00a0<code class=\"codecolorer javascript default\"><span class=\"javascript\">todo<\/span><\/code>\u00a0exists\u00a0in the collection\u00a0.\u00a0With the command line tool\u00a0cURL,\u00a0you can quickly create a corresponding document.\u00a0It is preinstalled on Mac OS X.\u00a0The command is:<\/p>\n<div class=\"codecolorer-container powershell default\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"line-numbers\">\n<div>1<\/div>\n<\/td>\n<td>\n<div class=\"powershell codecolorer\">$ curl\u00a0<span class=\"sy0\">&#8211;<\/span>\u00a0X POST\u00a0<span class=\"sy0\">&#8211;\u00a0<\/span><span class=\"kw2\">H\u00a0<\/span><span class=\"st0\">&#8216;Content type: application \/ json&#8217;\u00a0<\/span><span class=\"sy0\">&#8211;<\/span>\u00a0d\u00a0<span class=\"st0\">&#8216;{&#8220;title&#8221;: &#8220;REST learn&#8221;}&#8217;<\/span>\u00a0http:\u00a0<span class=\"sy0\">\/\/<\/span>\u00a0127.0.0.1:\u00a0<span class=\"nu0\">1337\u00a0<\/span><span class=\"sy0\">\/<\/span>\u00a0api\u00a0<span class=\"sy0\">\/<\/span>\u00a0todos<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>If you now\u00a0call http:\/\/127.0.0.1:1337\/api\/todos\u00a0, you can see the newly created Todo:<\/p>\n<div id=\"attachment_3645\" class=\"wp-caption aligncenter\">\n<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"3645\" data-permalink=\"https:\/\/www.virtono.com\/community\/tutorial-how-to\/how-to-deploy-redis-on-kubernetes\/attachment\/screenshot-2023-07-25-at-13-42-58\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-25-at-13.42.58.png?fit=1142%2C145&amp;ssl=1\" data-orig-size=\"1142,145\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Screenshot-2023-07-25-at-13.42.58\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-25-at-13.42.58.png?fit=300%2C38&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2023\/07\/Screenshot-2023-07-25-at-13.42.58.png?fit=750%2C95&amp;ssl=1\" class=\" wp-image-3645\" src=\"https:\/\/i0.wp.com\/www.senaeh.de\/wp-content\/uploads\/2013\/10\/127.0.0.1_1337_api_todos.png?resize=307%2C198\" alt=\"\" width=\"307\" height=\"198\" \/><\/p>\n<p class=\"wp-caption-text\">REST API in use<\/p>\n<\/div>\n<p>The field\u00a0<code class=\"codecolorer javascript default\"><span class=\"javascript\">_id<\/span><\/code>\u00a0is automatically set by MongoDB and the field\u00a0<code class=\"codecolorer javascript default\"><span class=\"javascript\">__v<\/span><\/code>\u00a0is automatically set by Mongoose.\u00a0<code class=\"codecolorer javascript default\"><span class=\"javascript\">_id<\/span><\/code>\u00a0we will use immediately to manipulate the document;\u00a0<code class=\"codecolorer javascript default\"><span class=\"javascript\">__v<\/span><\/code>\u00a0can be ignored for this article series (see\u00a0here\u00a0\u00a0for more information).<\/p>\n<p>With the method\u00a0<code class=\"codecolorer powershell default\"><span class=\"powershell\">PUT<\/span><\/code>\u00a0and\u00a0the method\u00a0<code class=\"codecolorer javascript default\"><span class=\"javascript\">_id<\/span><\/code>\u00a0we can update our document.\u00a0Note that yours is\u00a0<code class=\"codecolorer javascript default\"><span class=\"javascript\">_id<\/span><\/code>\u00a0probably different!<\/p>\n<div>\n<div class=\"codecolorer-container powershell default\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"line-numbers\">\n<div>1<\/div>\n<\/td>\n<td>\n<div class=\"powershell codecolorer\">$ curl\u00a0<span class=\"sy0\">&#8211;<\/span>\u00a0XPUT\u00a0<span class=\"sy0\">&#8211;\u00a0<\/span><span class=\"kw2\">H\u00a0<\/span><span class=\"st0\">&#8216;Content type: application \/ json&#8217;\u00a0<\/span><span class=\"sy0\">&#8211;<\/span>\u00a0d\u00a0<span class=\"st0\">&#8216;{&#8220;completed&#8221;: &#8220;true&#8221;}&#8217;<\/span>\u00a0http:\u00a0<span class=\"sy0\">\/\/<\/span>\u00a0127.0.0.1:\u00a0<span class=\"nu0\">1337\u00a0<\/span><span class=\"sy0\">\/<\/span>\u00a0api\u00a0<span class=\"sy0\">\/<\/span>\u00a0todos\u00a0<span class=\"sy0\">\/<\/span>\u00a0524989d90c67d4a135000001<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Now the field\u00a0<code class=\"codecolorer javascript default\"><span class=\"javascript\">completed<\/span><\/code>\u00a0is\u00a0<code class=\"codecolorer javascript default\"><span class=\"javascript\"><span class=\"kw2\">true<\/span><\/span><\/code>\u00a0set to.\u00a0You can check it in the browser.\u00a0With the following command the Todo can be completely deleted.<\/p>\n<div>\n<div class=\"codecolorer-container powershell default\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"line-numbers\">\n<div>1<\/div>\n<\/td>\n<td>\n<div class=\"powershell codecolorer\">$ curl\u00a0<span class=\"sy0\">&#8211;<\/span>\u00a0X DELETE http:\u00a0<span class=\"sy0\">\/\/<\/span>\u00a0127.0.0.1:\u00a0<span class=\"nu0\">1337\u00a0<\/span><span class=\"sy0\">\/<\/span>\u00a0api\u00a0<span class=\"sy0\">\/<\/span>\u00a0todos\u00a0<span class=\"sy0\">\/<\/span>\u00a0524989d90c67d4a135000001<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Congratulation!\u00a0You have a working REST API.\u00a0In the next chapter we will make the final preparations to develop a client for our web application with AngularJS.<\/p>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Series:\u00a0Introduction to the MEAN Stack Part 1: Definition of the MEAN stack Part 2:\u00a0Setup of the MEAN stack Part 3:\u00a0Node.js Part 4:\u00a0npm Part 5:\u00a0Connect Part 6:\u00a0Express Part 7:\u00a0MongoDB Part 8:\u00a0Mongoose Part 9:\u00a0REST Part 10:\u00a0Baucis Part 11:\u00a0Bower Part 12:\u00a0AngularJS Part 13:\u00a0Restangular In today&#8217;s article, we practically apply our theoretical knowledge about<\/p>\n","protected":false},"author":4,"featured_media":1112,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[5,3],"tags":[],"class_list":["post-1111","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-knowledgebase","category-tutorial-how-to"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/opensouthcode-microservicios-sobre-mean-stack-15-638.jpg?fit=638%2C359&ssl=1","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/s7ISfL-baucis","jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":1089,"url":"https:\/\/www.virtono.com\/community\/tutorial-how-to\/setup-of-the-mean-stack\/","url_meta":{"origin":1111,"position":0},"title":"Setup of the MEAN stack","author":"Daniel Draga","date":"October 9, 2017","format":false,"excerpt":"Series:\u00a0Introduction to the MEAN Stack Part 1: Definition of the MEAN stack Part 2:\u00a0Setup of the MEAN stack Part 3:\u00a0Node.js Part 4:\u00a0npm Part 5:\u00a0Connect Part 6:\u00a0Express Part 7:\u00a0MongoDB Part 8:\u00a0Mongoose Part 9:\u00a0REST Part 10:\u00a0Baucis Part 11:\u00a0Bower Part 12:\u00a0AngularJS Part 13:\u00a0Restangular In this article, we will lay out the basics for\u2026","rel":"","context":"In &quot;Tutorials&quot;","block_context":{"text":"Tutorials","link":"https:\/\/www.virtono.com\/community\/category\/tutorial-how-to\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/meanjs-1024x492.png?fit=1024%2C492&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/meanjs-1024x492.png?fit=1024%2C492&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/meanjs-1024x492.png?fit=1024%2C492&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/meanjs-1024x492.png?fit=1024%2C492&ssl=1&resize=700%2C400 2x"},"classes":[]},{"id":1120,"url":"https:\/\/www.virtono.com\/community\/tutorial-how-to\/restangular\/","url_meta":{"origin":1111,"position":1},"title":"Restangular","author":"Shreyash Sharma","date":"October 16, 2017","format":false,"excerpt":"Series:\u00a0Introduction to the MEAN Stack Part 1: Definition of the MEAN stack Part 2:\u00a0Setup of the MEAN stack Part 3:\u00a0Node.js Part 4:\u00a0npm Part 5:\u00a0Connect Part 6:\u00a0Express Part 7:\u00a0MongoDB Part 8:\u00a0Mongoose Part 9:\u00a0REST Part 10:\u00a0Baucis Part 11:\u00a0Bower Part 12:\u00a0AngularJS Part 13:\u00a0Restangular After the last time we saw AngularJS only superficially, I\u2026","rel":"","context":"In &quot;Knowledgebase&quot;","block_context":{"text":"Knowledgebase","link":"https:\/\/www.virtono.com\/community\/category\/knowledgebase\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/ON31nCTRba5GPcZj4elX_WhatsApp-Image-2016-11-21-at-22.22.07.jpeg?fit=600%2C340&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/ON31nCTRba5GPcZj4elX_WhatsApp-Image-2016-11-21-at-22.22.07.jpeg?fit=600%2C340&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/ON31nCTRba5GPcZj4elX_WhatsApp-Image-2016-11-21-at-22.22.07.jpeg?fit=600%2C340&ssl=1&resize=525%2C300 1.5x"},"classes":[]},{"id":1114,"url":"https:\/\/www.virtono.com\/community\/tutorial-how-to\/bower\/","url_meta":{"origin":1111,"position":2},"title":"Bower","author":"Shreyash Sharma","date":"October 15, 2017","format":false,"excerpt":"Series:\u00a0Introduction to the MEAN Stack Part 1: Definition of the MEAN stack Part 2:\u00a0Setup of the MEAN stack Part 3:\u00a0Node.js Part 4:\u00a0npm Part 5:\u00a0Connect Part 6:\u00a0Express Part 7:\u00a0MongoDB Part 8:\u00a0Mongoose Part 9:\u00a0REST Part 10:\u00a0Baucis Part 11:\u00a0Bower Part 12:\u00a0AngularJS Part 13:\u00a0Restangular Before we develop a web application with AngularJS, I introduce\u2026","rel":"","context":"In &quot;Knowledgebase&quot;","block_context":{"text":"Knowledgebase","link":"https:\/\/www.virtono.com\/community\/category\/knowledgebase\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/bower-logo.png?fit=1024%2C900&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/bower-logo.png?fit=1024%2C900&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/bower-logo.png?fit=1024%2C900&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/bower-logo.png?fit=1024%2C900&ssl=1&resize=700%2C400 2x"},"classes":[]},{"id":1082,"url":"https:\/\/www.virtono.com\/community\/knowledgebase\/definition-of-the-mean-stack\/","url_meta":{"origin":1111,"position":3},"title":"Definition of the MEAN stack","author":"Shreyash Sharma","date":"October 9, 2017","format":false,"excerpt":"Series:\u00a0Introduction to the MEAN Stack Part 1: Definition of the MEAN stack Part 2:\u00a0Setup of the MEAN stack Part 3:\u00a0Node.js Part 4:\u00a0npm Part 5:\u00a0Connect Part 6:\u00a0Express Part 7:\u00a0MongoDB Part 8:\u00a0Mongoose Part 9:\u00a0REST Part 10:\u00a0Baucis Part 11:\u00a0Bower Part 12:\u00a0AngularJS Part 13:\u00a0Restangular In a new article series, I would like to\u00a0offer\u00a0you an\u2026","rel":"","context":"In &quot;Knowledgebase&quot;","block_context":{"text":"Knowledgebase","link":"https:\/\/www.virtono.com\/community\/category\/knowledgebase\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/Mean.jpg?fit=1200%2C675&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/Mean.jpg?fit=1200%2C675&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/Mean.jpg?fit=1200%2C675&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/Mean.jpg?fit=1200%2C675&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/Mean.jpg?fit=1200%2C675&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":1095,"url":"https:\/\/www.virtono.com\/community\/tutorial-how-to\/npm\/","url_meta":{"origin":1111,"position":4},"title":"npm","author":"Daniel Draga","date":"October 10, 2017","format":false,"excerpt":"Series:\u00a0Introduction to the MEAN Stack Part 1: Definition of the MEAN stack Part 2:\u00a0Setup of the MEAN stack Part 3:\u00a0Node.js Part 4:\u00a0npm Part 5:\u00a0Connect Part 6:\u00a0Express Part 7:\u00a0MongoDB Part 8:\u00a0Mongoose Part 9:\u00a0REST Part 10:\u00a0Baucis Part 11:\u00a0Bower Part 12:\u00a0AngularJS Part 13:\u00a0Restangular npm\u00a0\u00a0is a package manager for managing modules.\u00a0That is, it makes\u2026","rel":"","context":"In &quot;Knowledgebase&quot;","block_context":{"text":"Knowledgebase","link":"https:\/\/www.virtono.com\/community\/category\/knowledgebase\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/weekly-header-grace-hopper.png?fit=1200%2C498&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/weekly-header-grace-hopper.png?fit=1200%2C498&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/weekly-header-grace-hopper.png?fit=1200%2C498&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/weekly-header-grace-hopper.png?fit=1200%2C498&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/weekly-header-grace-hopper.png?fit=1200%2C498&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":1105,"url":"https:\/\/www.virtono.com\/community\/tutorial-how-to\/mongoose\/","url_meta":{"origin":1111,"position":5},"title":"Mongoose","author":"Shreyash Sharma","date":"October 12, 2017","format":false,"excerpt":"Series:\u00a0Introduction to the MEAN Stack Part 1: Definition of the MEAN stack Part 2:\u00a0Setup of the MEAN stack Part 3:\u00a0Node.js Part 4:\u00a0npm Part 5:\u00a0Connect Part 6:\u00a0Express Part 7:\u00a0MongoDB Part 8:\u00a0Mongoose Part 9:\u00a0REST Part 10:\u00a0Baucis Part 11:\u00a0Bower Part 12:\u00a0AngularJS Part 13:\u00a0Restangular Mongoose\u00a0is a framework which is based on the\u00a0native MongoDB driver\u00a0and\u2026","rel":"","context":"In &quot;Knowledgebase&quot;","block_context":{"text":"Knowledgebase","link":"https:\/\/www.virtono.com\/community\/category\/knowledgebase\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.virtono.com\/community\/wp-content\/uploads\/2017\/10\/mongoose.png?fit=370%2C200&ssl=1&resize=350%2C200","width":350,"height":200},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/posts\/1111","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/comments?post=1111"}],"version-history":[{"count":2,"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/posts\/1111\/revisions"}],"predecessor-version":[{"id":1182,"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/posts\/1111\/revisions\/1182"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/media\/1112"}],"wp:attachment":[{"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/media?parent=1111"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/categories?post=1111"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.virtono.com\/community\/wp-json\/wp\/v2\/tags?post=1111"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}