<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Biliane Moreira</title>
    <description>The latest articles on DEV Community by Biliane Moreira (@bilianemoreira).</description>
    <link>https://dev.to/bilianemoreira</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F360418%2F795138c5-cb4b-4534-a45b-2b720c650859.jpg</url>
      <title>DEV Community: Biliane Moreira</title>
      <link>https://dev.to/bilianemoreira</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bilianemoreira"/>
    <language>en</language>
    <item>
      <title>A Simple Introduction to NodeJS. </title>
      <dc:creator>Biliane Moreira</dc:creator>
      <pubDate>Wed, 19 Aug 2020 19:16:03 +0000</pubDate>
      <link>https://dev.to/bilianemoreira/a-simple-introduction-to-nodejs-k1k</link>
      <guid>https://dev.to/bilianemoreira/a-simple-introduction-to-nodejs-k1k</guid>
      <description>&lt;h2&gt;
  
  
  What is NodeJS for?
&lt;/h2&gt;

&lt;p&gt;For those who don't know, NodeJS is open-source created by Ryan Dahl that allows us to use Javascript so that we can create scripts on the command line and communicate with the server in order to produce dynamic content for our applications before everything is done. rendered to the user.  &lt;/p&gt;

&lt;p&gt;ASome main features of NodeJS are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We do not handle end-user events;&lt;/li&gt;
&lt;li&gt;We can make routes and integrations in the Backend using Javascript.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  NPM
&lt;/h2&gt;

&lt;p&gt;At Node, we usually use a package manager known as NPM (Node Package Manager), which hosts thousands of free packages created by various developers (you can also create packages and distribute through them). A NodeJS package contains all the files we need to start with the node. We can also manage versions and dependencies that are used to execute a project/application. &lt;/p&gt;

&lt;h2&gt;
  
  
  Yarn
&lt;/h2&gt;

&lt;p&gt;Yarn is another package manager that has been gaining great repercussions for making the management process even easier because it stores a cache of packages that have already been downloaded making it faster than NPM and with more advanced technologies.    &lt;/p&gt;

&lt;h2&gt;
  
  
  Features in NodeJS
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Event-loop architecture (based on events);&lt;/li&gt;
&lt;li&gt;Call Stack - uses a stack of events where whenever a function is executed, it enters the stack, which executes only one thing at a time;&lt;/li&gt;
&lt;li&gt;Initially, Single thread (only one processor core), when using V8 (Google Engine used to run the Node);&lt;/li&gt;
&lt;li&gt;Uses the C ++ libuv (which allows you to use more processor threads and make the Call Stack faster);&lt;/li&gt;
&lt;li&gt;Non-blocking I / O architecture - which transmits non-blocking input and output - a request that returns a more summarized listing and not all at once, and can be listed in parts (important for real-time applications, eg in chats ).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Call stack receives a stack with functions that are in the event loop, the function that comes later is the first to be processed, known as * Last in, First out * (Lifo). &lt;/p&gt;

&lt;h2&gt;
  
  
  Frameworks to NodeJS
&lt;/h2&gt;

&lt;p&gt;There are many Frameworks used with NodeJS that were created to facilitate productivity and scalability, when for example, we can use specific treatments for HTTP methods (GET, POST, DELETE, PUT) and also separate and handle route and dynamic responses. Some of them are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ExpressJS&lt;/li&gt;
&lt;li&gt;AdonisJS&lt;/li&gt;
&lt;li&gt;NestJS&lt;/li&gt;
&lt;li&gt;Meteor&lt;/li&gt;
&lt;li&gt;SailsJS&lt;/li&gt;
&lt;li&gt;Loopback&lt;/li&gt;
&lt;li&gt;Nest Js, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ExpressJS
&lt;/h2&gt;

&lt;p&gt;I will give a summary of the use of the ExpressJS Framework, as it is what I know and which I have now learned to use.&lt;/p&gt;

&lt;p&gt;Some of the features of ExpressJS:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It has an open structure;&lt;/li&gt;
&lt;li&gt;Used in microservices (divide the application);&lt;/li&gt;
&lt;li&gt;Use handlers for different HTTP verbs and different routes (URL);&lt;/li&gt;
&lt;li&gt;Add middleware, which adds more requests at any point and which solves many web development problems.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Using API - REST (one of the ExpressJS utilities)
&lt;/h2&gt;

&lt;p&gt;An API (Application Programming Interface), is a set of routines and standards established and documents by one type of application so that another application can use its functionality without needing to know all the details. It is the interoperability of applications.&lt;/p&gt;

&lt;p&gt;The REST (Representational State Transfer), on the other hand, are principles that allow the creation of a project with well-defined interfaces and that allow applications to communicate with each other.&lt;/p&gt;

&lt;p&gt;Joining the REST API we have a set of HTTP methods that request information from the server through HTTP protocol and ExpressJS that allows us to use these methods.&lt;/p&gt;

&lt;p&gt;The REST API works as follows in the request and response flow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Request made for a client&lt;/li&gt;
&lt;li&gt;The response returned through a data structure (array type)&lt;/li&gt;
&lt;li&gt;The customer receives responses and processes results.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  HTTP Methods:
&lt;/h3&gt;

&lt;p&gt;We use the following HTTP methods when creating routes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GET&lt;/strong&gt; - &lt;a href="http://minhaapi.com/users"&gt;http://myapi.com/users&lt;/a&gt; (seek information within the backend);&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;POST&lt;/strong&gt; - &lt;a href="http://minhaapi.com/users"&gt;http://myapi.com/users&lt;/a&gt; (to create some information on the backend);&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PUT/PATCH&lt;/strong&gt; - &lt;a href="http://minhaapi.com/users/1"&gt;http://myapi.com/users/1&lt;/a&gt; (to change some information on the backend).
Note: PUT is used for various information and PATCH for specific information.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DELETE&lt;/strong&gt; - &lt;a href="http://minhaapi.com/users"&gt;http://myapi.com/users&lt;/a&gt;/1 (to delete information on the backend)

Note: The above users are called resources or routes. The '1' are parameters passed in the PUT or DELETE.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Examples of pieces of code used in the app.js file in a node application with Express and REST:
&lt;/h3&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;//GET&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/repositories&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt; 
  &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;repositories&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;repo&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;repo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
  &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;repositories&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;//POST&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/repositories&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;techs&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;repository&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="na"&gt;likes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;techs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="nx"&gt;repositories&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;repository&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;repository&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;//PUT&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/repositories/:id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;techs&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;repositoryIndex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;repositories&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;findIndex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;repo&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;repo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;repositoryIndex&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Repository not found&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;likes&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;repositories&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;repositoryIndex&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;repository&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
      &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;techs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nx"&gt;likes&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="nx"&gt;repositories&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;repositoryIndex&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;repository&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;repository&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;//DELETE&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/repositories/:id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;repositoryIndex&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;repositories&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;findIndex&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;repo&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;repo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;repositoryIndex&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Project not found&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nx"&gt;repositories&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;splice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;repositoryIndex&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;204&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;send&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Note: the parameter: id must be used when using the PUT method (since the change is only in one file) and in the DELETE method (as we generally do not want to delete all files)&lt;/p&gt;

&lt;p&gt;ex:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/projects/:id&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;project 4&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;project 2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;project 3&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

    &lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Testing routes
&lt;/h3&gt;

&lt;p&gt;I generally use an open-source tool to test routes made with REST called &lt;a href="https://insomnia.rest/"&gt;Insomnia&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Main types of parameters - HTTP Method
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Query Params
&lt;/h3&gt;

&lt;p&gt;Query params receive the request data as a parameter in the URL, it can contain 1 or more parameters.&lt;/p&gt;

&lt;h3&gt;
  
  
  Route params
&lt;/h3&gt;

&lt;p&gt;Receive the requested data on the route, it is the best way to search for something, delete or update by ID, for example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GET http://myapi.com/animes/1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;





&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DELETE http://myapi.com/animes/1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;





&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PUT http://myapi.com/animes/1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  Request Body
&lt;/h3&gt;

&lt;p&gt;It is used for the rest of the requisitions, more precisely the content when creating or editing a resource with POST create (through JSON) eg: Frontend registration form&lt;/p&gt;

&lt;p&gt;This can be done by Insomnia in the * Body&amp;gt; JSON tab and enter the following code: *&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"App React Native"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"owner"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Biliane Moreira"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;To obtain the body data of the request, we can access it with the following piece of code in POST:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/projects&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/projects&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;body&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Note: By default, Express does not interpret what we send to it in JSON.&lt;/p&gt;

&lt;p&gt;So we must add information to our code so that Express understands that our API will receive information in the JSON format, after "const app = express ();" and always before routes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;use&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  HTTP codes
&lt;/h2&gt;

&lt;p&gt;It is interesting that a response is placed in the code when the user's request is not fulfilling or is not found, return an error or success message to the user if his request is found. 3 digit number that identifies the status of that response to the request, as in the example below:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;repositoryIndex&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Repository not found&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The principals errors code is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1xx: is informative;&lt;/li&gt;
&lt;li&gt;2xx: Success (200: success and 201: created);&lt;/li&gt;
&lt;li&gt;3xx: Redirection (301 moved permanently and 302 moved):&lt;/li&gt;
&lt;li&gt;4xx: Client Error: (400: Bad request, 401: unauthorized, 
404: Not found);&lt;/li&gt;
&lt;li&gt;5xx upwards are Server Error (500: Internal server error).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
If you want to learn more about NodeJS, I advise you to read the guides &lt;a href="https://nodejs.org/en/docs/guides/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There are also great courses at Udemy, &lt;a href="https://www.udemy.com/course/nodejs-the-complete-guide/"&gt;like Maximilian's course&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
See you in the next post!&lt;/p&gt;

</description>
      <category>node</category>
      <category>rest</category>
      <category>api</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Great Tools for Developers!</title>
      <dc:creator>Biliane Moreira</dc:creator>
      <pubDate>Tue, 11 Aug 2020 17:49:06 +0000</pubDate>
      <link>https://dev.to/bilianemoreira/great-tools-for-developers-1ga8</link>
      <guid>https://dev.to/bilianemoreira/great-tools-for-developers-1ga8</guid>
      <description>&lt;p&gt;When I started my journey in Web Development and UI Design, I always try to find tools that help me to do my task in the best way. I particularly like to customize many tools and make my daily life more productive, so here I share some of them for you that you don't know or have heard but haven't tested yet.&lt;/p&gt;

&lt;h3&gt;
  
  
  1 - Visual Code Studio tools:
&lt;/h3&gt;

&lt;p&gt;I think that many devs know about this code text editor! But not everyone knows that this tool could be improved and become more productive and enjoyable. Here I put some examples of most of them:&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Themes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There is a button in the sidebar on the Visual Code that you can install themes or other functionalities called "Extensions". In there, you can find beautiful themes like 'Norde', 'Palenight', 'Omni', ' One Monokai', 'Darcula', 'Horizon', 'Cobalt2', and many others. These themes make your code more agreeable and more organized, plus you can match your terminal or desktop theme:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3N8Zu6Jd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://orta.io/vscode-themes/images/5%2520Colors%2520Dark.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3N8Zu6Jd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://orta.io/vscode-themes/images/5%2520Colors%2520Dark.png" alt="theme 1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Material Icon Theme&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Material Icon Theme is an extension for VS Code that allows customization of folder icons by file extensions, for example, with it we can customize an icon for typescript files, another for javascript, another for HTML, etc.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5HRSvepQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://media-exp1.licdn.com/dms/image/C4E12AQEAxUiQshbo1A/article-inline_image-shrink_1500_2232/0%3Fe%3D1602720000%26v%3Dbeta%26t%3DKjbxhsu791lRMeKTBSLC8K1ZZnhaBSiWyU4sCEnlBYI" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5HRSvepQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://media-exp1.licdn.com/dms/image/C4E12AQEAxUiQshbo1A/article-inline_image-shrink_1500_2232/0%3Fe%3D1602720000%26v%3Dbeta%26t%3DKjbxhsu791lRMeKTBSLC8K1ZZnhaBSiWyU4sCEnlBYI" alt="examples os icons"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/tonsky/FiraCode"&gt;Fira Code&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Fira Code is a free monospaced font containing ligatures for common programming multi-character combinations. This is just a font rendering feature: the underlying code remains ASCII-compatible. This helps to read and understand code faster. For some frequent sequences like .. or //, ligatures allow us to correct spacing. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MODgWt_p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://media-exp1.licdn.com/dms/image/C4E12AQE5cUNYSnhmvA/article-inline_image-shrink_1000_1488/0%3Fe%3D1602720000%26v%3Dbeta%26t%3DmgCrVsirI65c_LfKZR-4a729vXV8wEfo8cEwMdjUJrI" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MODgWt_p--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://media-exp1.licdn.com/dms/image/C4E12AQE5cUNYSnhmvA/article-inline_image-shrink_1000_1488/0%3Fe%3D1602720000%26v%3Dbeta%26t%3DmgCrVsirI65c_LfKZR-4a729vXV8wEfo8cEwMdjUJrI" alt="Fira Code font"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;br&gt;
&lt;/h2&gt;



&lt;h3&gt;
  
  
  2 - Framework &lt;a href="https://ohmyz.sh/"&gt;Oh My Zsh&lt;/a&gt; to your Shell Zsh:
&lt;/h3&gt;

&lt;p&gt;If you are a Linux or Mac user or use virtualized Linux on Windows and use Zsh shell in your terminal, you can make use of a great open-source framework called 'Oh My Zsh', which allows you to configure the theme and other features and functions.&lt;/p&gt;

&lt;p&gt;It includes more than 275 optional plugins (NodeJS, git, Visual Code, PostgreSQL, React, Docker, Python, etc.), and more than 145 themes.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;br&gt;
&lt;/h2&gt;



&lt;h3&gt;
  
  
  3 - Extensions:
&lt;/h3&gt;

&lt;p&gt;Most of the extensions I quote here are for Chrome / Chromium, but some of them may exist for other browsers like Firefox or others.&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;a href="https://chrome.google.com/webstore/detail/json-viewer/gbmdgpbipfallnflgajpaliibnhdgobh"&gt;Json Viewer&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is an extension for Google Chrome that allows you to configure the theme for JSON / JSONP. You can add syntax highlighting, themes, collapsible nodes, etc. &lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi"&gt;React DevTools&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is an open-source tool that allows us to inspect the React component hierarchies in the Chrome Developer Tool on an application made with React.&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://chrome.google.com/webstore/detail/octotree/bkhaagjahfmjljalopjnoealnfndnagc"&gt;Octotree&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This great tool can be useful when you need to access some archives in your repositories on Github, and need to open many folders and get lost like me! :) This creates a tree with your folders in the recent repositories that you open at the moment. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RqMYOL0K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://media-exp1.licdn.com/dms/image/C4E12AQGePUC1wtSJGw/article-inline_image-shrink_1000_1488/0%3Fe%3D1602720000%26v%3Dbeta%26t%3DbYd0oLFCHRpKb9UCK1m8p35Q6JoVlshmhejhnPuc_ww" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RqMYOL0K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://media-exp1.licdn.com/dms/image/C4E12AQGePUC1wtSJGw/article-inline_image-shrink_1000_1488/0%3Fe%3D1602720000%26v%3Dbeta%26t%3DbYd0oLFCHRpKb9UCK1m8p35Q6JoVlshmhejhnPuc_ww" alt="Octotree"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;br&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  4 - DevDocs
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://devdocs.io/"&gt;Devdocs&lt;/a&gt; is a website that concentrates the documentation of several programming languages as well as other technologies. You can use the web version or the desktop version and add the documentation you usually consult on the left side of the page and easily access each one or &lt;br&gt;
you can also download favorite documentation to access offline.&lt;/p&gt;

&lt;p&gt;You can find the desktop version &lt;a href="https://github.com/egoist/devdocs-desktop"&gt;here&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZdZxZSyA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/4476/1%2AuHq0NLwh7BkgoDCrayagHw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZdZxZSyA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/4476/1%2AuHq0NLwh7BkgoDCrayagHw.png" alt="Devdocs"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;




&lt;p&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;We reached the end of the post and I mentioned here just a few tools and the ones I use the most, so the post doesn't get too big! But you can look for more tools  &lt;a href="https://developers.google.com/web/tools"&gt;here&lt;/a&gt; and find many other tools that will suit your work style and your time:&lt;/em&gt;&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;em&gt;Bye and until the next post!&lt;/em&gt; :)&lt;/p&gt;

</description>
      <category>todayisearched</category>
      <category>vscode</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
