MEAN create a fast and robust application with noSQL

          MEAN stack – Synopsis

 

 “How Node.js and Express.js Fits and Operates in MEAN stack plus routing, http:// service?”

We Will Write a Custom Essay Specifically
For You For Only $13.90/page!


order now

 

Author: Bipin Rai

Supervisor : Henrik Holtzer

Semester : 4th

Date: 01/12/2017

Contents:

·       Introduction

·       Problem Definition

·       Method

·       Planning

·       What is MEAN stack & How different frameworks fit together?

·       Why is Node.js considered faster ?

·       How Node.js cope-up with express, Middleware and Routing?

·       mongojs or mongoose in Node?

 

1.    Introduction

        This stack combination allow us to create a fast and robust application with  noSQL database using MongoDB, a RESTFUL API using ExpressJS and rich front end for the client using Angular, all speaking the same language of Javascript and passing data in one format(JSON). Since the passing of object from client side to server side and vice-versa is by default json it is much easier and scalable. Moreover the power of MEAN stack is like it gives the super flexibility of cross-functional tasking in the group, the back-end developer can start over to the frontend any day and frontend developer can give a hand to backend developer accordingly. The MEAN acronym is consist of:

(M) = MongoDB.

      MongoDB is noSQL, document oriented database. It does not contain table formed database which has rows and columns as in relational database e.g MySql. Instead of writing queries to store data into the tables of database we store the data in collections consisting of individual documents.

(E) = Express.js

       Express.js is a web framework for MEAN stack which sits on top of Node.js and assists providing better features for handling web requests. It has rich features regarding middleware and routings hence becoming the back-bone for node server. It is a mentor which deals on routing to the client’s desired parts of the application.

(A) = Angular

        Among all the frameworks in MEAN stack Angular is the only framework which resides in the client side and provides clients a dynamic app features. It is type-script based which is more like a full featured framework helps us to create single page application.

(N) = Node.js

     Node.js is a single threaded powerful server platform which is backed up by google chrome’s javascript V8 engine. It is an opensource, server-side platform which is quite strong for building faster and more scalabe sleek web applications. It is based on event-driven and non-blocking technology thus making it faster and efficient for real-time projects.

The resources which we use to build application based on MEAN stack are as follow:

 

Concept of MEAN stack

                                                Fig.1 (MEAN stack Concept)

 

 

2.    Problem Definition

 During the project development of my 4th semester I came across all of these components within the MEAN stack. The Angular is already getting tough competetion from React approahed by facebook and MongoDB in some case can not provide flexibility as the relational database can provide. In tomorrow’s web industry it is a must thing to learn is Node.js+Expres.js and this is the component which i find the most interesting and valuable. Most common demand in any of development process or project is a solid server which really lives up to expectation and serves really well between front end and backend resources.

The main question will evolve around how the Routing works in MEAN stack and how client side programming is connected to database and it’s resources via Restful API. So beside what the MEAN stack application really is, the main question here in this synopsis will be “How MEAN stack handles Routings, Web request ? Along with the vital question how different frameworks in MEAN stack works together.

1.     How is Node.js asynchronous and non-blocking I/O model?

2.     How Node.js handles web requests and routes?

3.     What is routing and middleware?

4.     What is mongoose?

 

The first question might help us to find a way why Node.js is real time application and serves faster than most of the other server engines and gain more knowledge of Blocking and non-blocking I/O models and how it plays a vital role for making Node server a standout server among others. The second question will help us to peek into the web handling and web service which the node.js handles injecting the express and mongoose. The third scenario will help us to  deep diver into the relation of Node and express with database and an overview of API’s functionality while the fourth question will be about Object Relaiton Mapping in MEAN stack. The very own heavy-weight question “How different frameworks in MEAN stact works together?” Will help us to know an in-depth overview of every frameworks in this particula stack.

3)How different frameworks of MEAN fits together?

In the past days developing a website was not an easy task. To be a developer we need to have a solid grasp in different programming languages. It was not an easy task for the team to understand each other’s code which would often lead to a complex environment for the whole team. The drastic difference among the layers of code and architecures would even lead to a slower and time consuming subject. Nowadays the rise of different frameworks which use the same languages are a kind of boon to many developers and has made developing the websites much more easier than before. The use of stacks which are familiar in language has inspired the cross-functionality among the team which has enhanced the performance of the whole team and brought an agile methodology to build software/website in a quicker time than ever.

      Here we will discuss about how the different frameworks of MEAN stack coincide with each other and how do these frameworks come together to fit in this stack making it a perfect one language stack front to end.

3.1)Overview on Angular :

 Angular is a javascript framework so are other frameworks within the MEAN stack. It is versatile and feature rich which is basically used to make simple page applicaitons. Like Node.js and express.js it is efficient and flexible which can run on all the browsers and smartphones hence enhancing the reach of whole MEAN app beyond desktop. Since Angular is Javascript framework and since it has two way data binding functionality it is by default much easier to pass the data and retrieve the data from its backend. The approach of two way data binding in Angular has made it more functional and super compatible with the backend. The ngRoute feature of angular allows us to handle routes making it possible to build single page applications without having to refresh/reload the pages. The usage of $http and $resource provides the feature for API call to the node.js backend from angular front end.

3.2) Overview on Node.js :

The rise of Node.js has brought forward a technicality to use javascript in the backend also. It has literally enhanced the usage of javascript to the serverside programming as well hence making it possible to stick to only one language through out the development phase. Node.js is much more faster than many of the server and server platform prevailing on the market. It helps to make the application execute faster because of its non blocking, event driven architecture. Node.js is basically based on google chromes’ V8 engine which is super powerful to render the javascript code. Node.js has the highest amount of third party modules which makes it come on top to pick as a server platform by many of the developers. It allows to add third pary modules on developer’s preferences and does blend well with express.js making it a versatile server building platform. Besides of its native language usability in MEAN stack, it’s scalable nature and capability to provide proper modules to mongoDB and express.js has made it better and much more compatible platform in the MEAN stack.

3.3)Overview on Express :

Express.js has the biggest community and is the most mature framework out of the other three frameworks used in MEAN stack. The framework which is an open source and monitored by most of the developers and on top of that which uses the same language is always the best option to use as a companion framework. Express.js is made in node.js itself and possess it’s much of the performance and characteristics as well. Express.js helps to code in easy way and faster on top of the node.js. Node.js is not a complete server itself alone, it is just a platform and it’s built in https funcitonality helps it to build simpe APIs and also enriches it with the event driven feature. If we are to make an applications using node.js it could be tediuos and overwhelming because of the amount of codes we have to write. There are lots of redundant codes in there. Thanks to the express.js which comes to the rescue to get rid of boiler plate codes and it also overpowers the https feature in node.js making it scalable. The middleware and routing features of express.js supplements the node.js to make it powerful server and supports it for asynchronous programming enhancing node.js’ speed and scalability. It’s all the grace of express.js which makes it possible to build applicaiton in half a time which node.js uses to do the same.

3.4)Overview on MongoDB :

MongoDB is a document oriented database which is schema less and more easy to scale. It is totally different than MySql database or say relational database where we do not have to deal with all the queries and complex key value properties, here we just send the object or data in json format to get it stored into the database. If both server side and client side program are written in javascript it makes sense to use the database which is also familiar to javascript. In MEAN stack since the server side is in javascript itself it makes a lot easier to send and retrieve the data from database and vice-versa without having to go through through serialization & deserialization which automatically reduces the complexity and extra code saving us time and effort. There is no hassle of taking care of schema of sql DB and has no complext joins or key value table structure. We do not have to think about hte query structure for injecting the data into the table we just pass it as a joson document which is pretty fast and flexibl which also complements the speediness of web frameworks used in MEAN stack.

2) Back-End developing :

Backend plays the vital role to communicate the two different layers (UI & Database) or lets say it is the mechanism to reach the resources bridging the frontend. In MEAN stack we use Node.js, Express and MongoDB as a backend components/frameworks. Here we are going to get a deeper dig into Node.js.

2.1) Node.js

Node.js is a platform to build server side web application. It makes easier to develop an event-driven, non-blocking I/O model, and it can handle tens of thousands of connections concurrently making it perfect for data intensive, real-time applications. All the backend part starts with the node.js as it gives the platform to build web server. For this project i installed the node version of v8.9.1 and npm version of 5.5.1 . We can always check the version of our node by typing node -v and npm -v respectively in the command.

2.1.0) What is I/O  – “scratch to Node.js”?

I/O stands for Input and Output and it means accessing anything outside of our application. Accessing the memory is pretty fast utilizing caching mechanism using RAM to store data. However most of the applications today need to access the network or read from a text file resulting these types of I/O slow in processing. Here is where non-blocking I/O plays a vital role.

2.1.1) Blocking I/O vs Non-Blocking I/O-” The phenomena which makes Node.js standout among others”.

Imagine in an app multiple users are trying to use the service at the same time , in this scenario the service ends up getting slow and late in responding time where the  other users have to wait until the execution of the previous task. Here the operating system which is responsible for handling the I/O calls gets blocked until the first task is executed. The small code snippet of blocking I/O would be like considering the File System Module as an example.

           

Here the line gets blocked until the whole file is read. Whereas in non-blocking I/O the utilization of call back function helps to render further without having to wait for the previous rendering. Eg:

 

  Here the moreWork() function will run asynchronously. Similarly reflecting to my simple app it is more like a real time application as it is built on a non blocking, asynchronous service. This asynchronous capability of Node.js is the main reason which helps it stand out as a significant server among other servers and since it uses the same engine as in google chrome which boosts the quick javascript engine it can execute thousands of instructions in second.

 

2.2 Express.js collaborating with Node.js:

Express basically is a framework which lies on top of node.js and helps simplifying its APIs and add other helpful features. It is required for us that the node.js is pre-installed before we start installing our npm module for express. We can install express by simply typing npm install express –save command in the integral window (I am using VisualStudioCode as my IDE). To use express we simply:

·        Import the express module where we have it as a dependency in package.json file.

·       After importing it we just assign it to variable app as app.js is my entry point.

·       We need to set the port where our express server will be listening to any request.

·       Bind our server with the newly defined port with call back functions.

·       We define routes in order to response accordingly when the get request on the particular route is triggered.

It is possible for node.js to handle the request or render the request without express but the facility which express.js provides with middleware and routing can not be met. If we are building our app on node.js without express.js, the architecture would be somehow like this.

              

                                                Fig: 2.2 source: MANNING Express in Action Book

 

In this kind of application there would be tedious and multiple boilerplate codes within Node.js’s https server, where express comes as a handy to make raw node.js’s  complex raw response into simplified one line. Moreover express.js helps you refactor one pile of request handler function into many smaller request handlers that handles only particular pieces and bits which is even more maintainable. In contrast to figure 2.2 the below figure shows the request will flow in an application with express.js like this.

 

              

                                       Fig. 2.3 source: MANNING Express in Action Book

2.3.) Deep understanding of Express.js:

      Express.js is minimal and it assists Node.js to make it more convenient to operate. Express.js is mainly all about Middleware and Routing. Here I will discuss a little bit about Middleware and Routing. However the four major features of express.js are Middleware, Routing, subapplications and conveniences.

2.3.1 Routing :

Middleware and Routing are the main functionality which the express provides to the application or say express is all about the Routing and Middleware framework. Like Middleware it breaks pile of requests handler function into smaller parts and are executed accordingly to the user’s request or response to the specific url.

When there is a get request call for the root page the server will just send the string “Hello From Server”.

 

 

      We can also pass the specific route request to the url hence returning the particular page or response. Here we pass the url with id attached and will return the page containing information about that very same get request of the id.

Express has the other method also in its hand which provides us the much better recognition on the middleware. The method app.use() is used to define middleware and takes only one callback. In my app I have used this particular middleware to forward/route any request, received by request handler method to the target files.

Here in the above code if there is any request which starts with /api or /api/..whatever it routes the request to the route.js file where I have declared the specific routes for different http requests in my project. Note I have already assigned the route to the route.js file which is inside routes folder while importing module.

2.3.2 Middleware:

Middleware is the main concept behind the request processing and routing for Express.js. Middleware are the smaller technically piled up several request handler function which are triggered by express.js routing layer before final request handler. So, in a sense middleware sits in the middle of I/O and application and helps to integrate different outcomes together with each-other. Middleware functions have access to the (req) object and (res) object where next function indicates it is done with the current middleware function cycle and go with the next function.

 

 

 

The above picture shows the middleware function for post() method in my project. I have chosen this particular method to show how it really gets the access into every request and response object and even can log the data within it. The above picture illustrates that after calling post() method and providing path to /contacts, middleware function i.e function(req,res,next)  it has the content of the request which we intend to post. It will print out the requested method’s phone property to the log.

Middleware can also handle tasks from logging requests to sending static files to setting HTTP headers. It can route users to the file which the users request and detect “unauthorized access” if users are visiting a forbidden url. The picture illustations would be like this.

                   

                                       Fig 2.2.1 source: MANNING Express in Action Book

The core mechanisms to be concerned while observing middleware would be:

·       The function signature is similar to one which we use in routes.

·       The third parameter in the method i.e next() basically denotes the current middleware is finished and to move to the next middleware.

·       Middleware can be generally used to perform tasks like body-parsing, cookie parsing and even for building javascript modules on the fly.

 

2.3.1.0) Limiting Paths for Middleware :

Let’s start with the example here to get a better concept.

     

                                 Fig… source: safari books online blog

In the Above code we can limit the middleware to some certain paths. When we are dealing with the app.get() method we have to give the url exactly what it is defined in the method. For instance in the above code we will have to specify localhost:3000/users/daily  to get to this very particular page request. However when we deal with the app.use() any request that is followed by /users can summon the function.

     

                                                                Fig:.. source = safari books online blog

As mentioned above the second code will exactly do the same thing as the method app.get() does. But, when we try to explore into its path and log out it’s path into the console it will be only until /users .

2.3.3 Sub-application (Routers) :

Express.js applicaions are usually smaller which can even be put in one file or are put in single file. However incase of our application get bigger we need to slice them up in multiple files and folders. There are always an option according to our preferences but express.js provides one special feature which is a quite helpful subapplicaiton , which can also be termed as routers. Express.js provides a way for us to manage those files through routers which we define.

Defining Router:

 

 

2.3.4 Conveniences :

It is already known express.js is all about routing and middleware where we need to cope with request handler function a lot. Express.js has made it more easier for the developers if we need to call a funciton that sends media file e.g JPEG file from folder. The simple and smart sendfile funciton in express.js can carry out this mechanism.

 

3) Connecting To Database (MongoJS) :

There are several ways to connect to MongoDB in MEAN stack. I have chosen to use Node.js’ default module MongoJS which is really easy to use and work well clearly as it emulates MongoDB API as much as possible. Since my app was not so delicate and heavy it gave more sense to use mongojs for mapping database. In mongojs we don’t have to define schemas as we define while doing the same task with Mongoose ODM. Mongojs is also not hard to use as we just provide the connection string of our database and there the database starts working.

Here in the connection string we just provide our user id and password. We give our collection name, simple as that.

 

 

4) CORS :

Since i have mentioned about cors in my project and since it is one of the main

4) Conclusion :

In most of the applications nowadays the I/O is still the weakest bond, the reading of datas from the disks, dealing with databases or networkings , complicated transferring of data and many more are still the slowest part of the server. But node.js ability to operate non blocking, asynchronous architecture has not only made it able to tackle this problem, It also prevailed it out to be one of the fastest server in the market. The codes are not intersected by each others and the call back funcitons in node.js even helps it to be more real time application.  Node.js has abundant amount of third party modules which also allows to write the modules of developers’ preferences making it even more compatible in every aspects. Since it’s this nature of flexibility in the modules it suits the express.js best as a server building platform. Express.js does for node.js what the bootstrap does for HTML/CSS, meaning it enhances the features of node.js and makes the whole developing process lot easier and simple. It provides the structure to the ripe javascript (Node) on the backend.

Present and future.

Blah blah

This is all we need to start development using the Express framework. To make our development process a lot easier, we will install a tool from npm, nodemon. This tool restarts our server as soon as we make a change in any of our files, otherwise we need to restart the server manually after each file modification. To install nodemon, use the following command ?