Introduction to the MEAN Stack

Building web applications involves having to use different technologies and tools, dealing with database manipulation, server side operations, and also client side handling and displaying of the data that comes from the server. Before starting a new project, all the tools and project structure has to be setup, which is a time consuming task. Using a framework or a stack for this task can speed up development and ease the work for the developer.

What Is MEAN

"MEAN is a fullstack JavaScript platform for modern web applications".

This is how the authors of the MEAN stack define it on their website. It's very clear that MEAN is targeting all kinds of JavaScript developers (both server and client side) and also that it is a stack platform which, indicates that there are several components comprising it.

These components are:

As you can see, MEAN brings together four of the most used and appreciated technologies for JavaScript development, laying down the foundation for easily building complex web applications.

Installation

The MEAN stack can be installed in two ways:

Installing MEAN Using Its Site

This method is quite simple. You just have to visit the mean.io site and then you can download the framework as a zip file by clicking on the big green button.

Another option available from here is to clone the Git repository. Just open a terminal and issue the following command:

Installing MEAN Using Yeoman

There are several Yeoman generators, written by different developers. Using a generator to install MEAN is done in two steps, first installing the generator:

and then using yo to create the app:

The example above assumes installation of the meanstack generator and also that Yeoman is installed. For a list of MEAN generators, check this link and filter by "mean". For information on installing Yeoman, check the Yeoman site.

Addy Osmani wrote a very interesting blog post about MEAN stack and Yeoman generators for it. I strongly recommend reading that, in order to find out how to install the stack using generators.

For the purpose of this article, I will use the Git cloning approach.

Post Installation

After installation, just cd into the folder where you installed the MEAN stack and issue the  grunt command (you should have grunt-cli installed). This command will start a server listening on port 3000, so visiting http://localhost:3000 in the browser will display something like this:

What We've Got After Installation

The MEAN stack is in fact a fully functional blog engine application. It has authentication using various methods: Facebook, GitHub, Twitter or Google and also by simple e-mail and password.

I bet you are curious to see some code up to now... So let's check it out. The MEAN stack folder structure should be like the following:

The Server Part

The server is split over two folders and one file:

  • app folder - contains the controllers, models and views that make up the application
  • config folder - contains the files that control how the parts of the app behave
  • server.js - is the entry point of the application

Let's take them one by one:

The server.js File

This is the file that starts the entire application. If you do not want to use grunt you can use node server,js in order to start the server.

The server.js file is responsible for:

  • Loading configuration. The files for configuring the application itself, authentication and database connection are loaded.
  • Bootstrapping the models. This is done by iterating through the models folder and loading all the files inside that folder (or its subdirectories).
  • Bootstrap passport
  • Initialize the express application
  • Configure the express application
  • Configure express application routes
  • Start listening on the configured port.

The config Folder

This folder contains the application configuration files. Inside you can find an env folder containing configurations for the development, production and test modes for running the application.

Also, there are files containing the configuration for the application itself, the express part and the passport configuration for logging in.

The app folder

Inside the app folder, resides the entire server side code. This folder contains sub-folders for the controllers, models and views that compose the MVC server application and also a folder for the routes that are served.

By default, there are controllers for the articles, users, and an index file for the root path. Also, models for the articles and users are created and routes for articles, users, and the root path are created during installation.

As for the default created views, the following structure is created:

The includes folder contains the footer and header parts of the pages which are inserted into all the pages belonging to the app. The layout folder contains the base HTML for the page layout. This layout is extended into the index.html file from the views folder.

The users folder contains the markup code for signing in, signing up and authenticating.

In the root of the views folder, beside the index.html file, there are files containing the markup for 404 and 500 errors.

The Client Part

The client part code resides in the public folder. This folder contains a css subfolder for application styling and an img folder containing the images used in the application.

Special attention should be paid to the js folder which contains the Angular code for the client side app, the initialization code, some directives and filters code (currently empty files) and the controllers and services for the articles and the header part of the application.The views folder contains the markup for article creation, editing, displaying and viewing.

Finally, the lib folder contains the Angular library code.

Application Testing

The test folder contains the files for testing the application. Mainly there are files for testing the server part using Mocha and files for testing the client part using Karma.

Tools Provided

While using the MEAN stack, you as the developer, also have access to npm, bower, and grunt which should be installed,

Something important to mention that JSHint is provided and all the JavaScript code is linted. Also, using Grunt, the project can be watched for modifications and rebuilt automatically.

Conclusion

This article is intended to be followed-up by a second tutorial, in which a complete application will be built on top of the MEAN stack, showing you how MEAN can be configured and adapted, to be used for other types of applications. 

Stay tuned for the second part!

Tags:

Comments

Related Articles