Nodejs Best Practices(part 1- Introduction)
Tags: backend, architecture, node, bestpractices
Published: 2021-10-02 12:27:19

I once heard a colleague ask, 'how do you survive with javascript(js), so many libraries. Nodejs, Reactjs, Angularjs, Vuejs, expressjs. Terrible, I pity you guys. Infact I know there is probably another js cooking', laughing hysterically. 
Hmmmmmmmmm. 

![A man sighing](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/syqexxfcsjlu0xb5irzs.jpg)
Well, in this series we will embark on a gradual understanding of concepts in Nodejs that most junior Nodejs developers struggle with. What better place to start than how to structure your code!!
But for starters, just what is nodejs?

# What is Nodejs?
I forgave my colleague for saying nodejs is a Javascript library, because he is wrong and nodejs is not a Javascript library.
Technical Jargon: **Nodejs is runtime environment for javascript on the server. It uses the javascript v8 engine, hence it's a single threaded, event driven environment.** 
Well!! If you understand that , good for you. But let's talk to the lay men( no disrespect intended).
During the early days of Js, Js can only power the web, meaning Javascript could only be run in the browser, strictly for websites interactivity, then came Nodejs passionately designed by My Very Respected colleague Ryan Dahl, making it possible to write code that servers understand. Take it that Nodejs is a microwave that made cooking with plates(Javascript) possible. You won't place your plate on a gas fire. But with the microwave plates can now be used to cook meals.
How this happens: Nodejs is a bunch of many smaller instructions written in C, C++ and of course javascript. Instructions that make it possible so the servers(other computers connected to your computer) that have the v8 engine installed can in turn run your custom instructions. Confusing?? Ok its like a tanker that has to be fueled to deliver it's product, fuel. Javascript needs Javascript to run Javascript in a computer. Lol. How funny? Well, I promise as we proceed you'll get the point, if you haven't already.
#Setting Up A Nodejs Application
Tools you Need
1. Nodejs:
   Download at [Get Nodejs](https://nodejs.org/en/download/)
   The instructions are quite clear, but if you have any 
   difficulty, please drop in comment section below
2. A Code Editor (I will use vscode throughout this tutorial)
   Download at [Get VsCode](https://code.visualstudio.com/download).
I really hope most of those reading this already are familiar with these tools, hence we shall not deliberate on setting up these tools. But as I have stated, I am here to help.
OK.. Now let build our firsT server.
Steps
1. Create a folder
2.Open vscode and open the folder
3. Press (control and backtick) to open an integrated terminal in vscode). Make sure your'e in the folder, the run
```
npm init -Y
```
npm comes with nodejs, so you don't need to install it. Then if you have the challenge of command not recognized or some kindaa error, share please, but for windows my best guess is you have to update your path variable. Check this resource [Update Path Variable](https://www.computerhope.com/issues/ch000549.htm) for that.

Moving on....
STEP 4 : For this tutorial, since we more concerned with best practices, we will be using a nodejs library and many other helper libraries to make things easy. I choose koa.js. Also note we will also make our api requests using graphql. Now let ride.....
Make sure you're still in the folder you ran npm init from. Now run the following command
```
npm i koa koa-mount graphql -S
```
For now these are all we need. Now lets write a basic sever.
Create a file index.mjs, and copy the code below and paste

index.mjs
```
import Koa from 'koa';
const app = new Koa();
// import {
  // response
app.use(ctx => {
  ctx.body = 'Hello Koa';
});
  
  app.listen(8080, () => {
      console.log("Server running.......")
  });


```
At this point before running the application or even explaining each line, make sure you have done the following steps...
1.Run 
```
npm init
```
2. Added a start script in your package.json
"start":"node index.mjs"
3. Made sure you're file is correctly named index.mjs not index.js.
4. And make sure you have the below file structure
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ap2w467bidz338gy4r40.png)
 Then run 
```
npm start
```
Now pay attention to your console... You should see  "Server running..."
Go to localhost:8080
'Hello koa'
Did you see that? If yes, weldone!!!
You have built a nodejs server....
Now is this just it? How boring! Relax and go over this again this is going get very interesting.. Part 2 loading.......