node package manager



Expressly: mongo-express-node stack starter blueprint written using JavaScript ES7 in a cross-platform development environments (os x, windows, or linux)

Setting up an Mongo Express Node backend is time consuming with lots of moving parts that have to be setup correctly. This blueprint is meant to provide a stable basis for building that backend. It is written with a focus on Javascript ES7 ... so, you'll get to use features like object destructuring and async/await. And includes starter points for user authentication using passport with email/password/JWT and includes bcrypt

File Structure

src - source for the app

- index.js - entry point

- config

	-- constants.js - configure development, production, test environments

	-- database.js - configure database environment/connections

	-- middleware.js - configure middleware based on environment

- modules - manages routes and api

	-- index.js - provides a single exportable point for the routes/api

	-- <purpose> (bundles routes/apis to their purpose ... e.g User folder manages user routes/apis)

		-- <purpose>.controllers.js - control the external api calls (e.g. MongoDb queries)

		-- <purpose>.model.js - Mongo database schema model

		-- <purpose>.routes.js - routes

		-- <purpose>.validation.js - validation of input to the database/api (e.g. user password strength)

- services

  -- - setups passport strategies

Packages (explanations for those that might not be obvious)

** compression: attempts to compress response bodies for all request that traverse through the middleware

** cross-env: use of environment variable cross platform (mainly so Windows OS doesn't choke)

** express-validation: validates the body, params, query, headers and cookies of a request and returns a response with errors

** helmet: secure Express app by setting a number of HTTP headers

** joi: object schema description language and validator for Javascript objects

** morgan:  HTTP request logger for Node.js

** rimraf: The UNIX command rm -rf for node ... we use to clean distribution folder


** bcrypt-nodejs: using this version of bcrypt because of installation issues with bcrypt for windows development platforms
** passport
** passport-local
** passport-jwt


** express

babel - a transpilier that transforms current (ES6/ES7) Javascript

** babel-core

** babel-loader

** babel-plugin-transform-object-rest-spread: allows Babel to transform rest properties for object destructuring assignment and spread properties for object literals

** babel-preset: automatically determine the Babel plugins and polyfills needed based on the supported environments

webpack - module bundler

** webpack-node-externals: Easily exclude node modules in Webpack