Project Overview

Document created by scott.hurrey on Feb 2, 2017Last modified by moneil on Feb 2, 2017
Version 2Show Document
  • View in full screen mode

This project space is dedicated to the open source migration of the Durham Sign Up List Building Block to a REST-enabled LTI Tool Provider. this migration will be documented as an example of this process, and all lessons learned and gotchas encountered will be documented for those interested in doing this themselves for another integration. The principal developers on this project will be Mark O'Neil and Scott Hurrey, with Malcolm Murray and Stephen Vickers acting as advisors.


The project will be written in Javascript using the MEAN stack. This stack was chosen for several reasons. First, it is a powerful app built of industry-proven components that handle the front-end and back-end processes all in one language. MEAN is also widely prevalent on the web, and so the stack and the use of Javascript allows for easy access to tutorials, guidance, and expertise for the participants in this project, as well as for institutions looking to adopt, alter, and maintain the code that results.


MEAN is an acronym that identifies the components of the stack:

  • MongoDb
  • Express
  • AngularJS
  • NodeJS




MongoDb is a NoSQL database. It is very powerful in that it is fully functional, scalable, and configurable as one would expect in any database, but it is also extremely developer friendly. The documents are store in JSON, so there is no costly overhead necessary for the serialization and deserialization of JSON objects. There are two libraries available to implement MongoDb using the MEAN stack, the MongoDb driver and the Mongoose library. The driver is built and maintained by MongoDb, and is very easy to use, but it lacks some structure around the data. Mongoose is built as a wrapper over the MongoDb driver. This library allows the developer to create schemas to create conformity amongst the documents being stored. It also abstracts some of the deeper level functionality to make it easier for the developer to use. For this project, we will use Mongoose.




The MEAN stack employs Express to handle the web server aspects of the application. Express takes care of the application configuration, parses HTTP Request bodies automatically, and handles the routing for the application. It is the glue that holds the MEAN stack together. Express has long been coupled with NodeJS, and offers integration with several templating engines like pug (formerly jade). In this project, we will be forgoing this templating in favor of AngularJS.




Angular is a powerful Javascript library that allows the injection of data responsively into standard HTML. Essentially, the HTML page is loaded once, and the interface is loaded via AJAX calls real time as the user interacts with the page. This saves from reloading the page ever single time something changes, and also allows for real time validation and user interaction. This is known as the Single Page Application (SPA) paradigm. Angular 2 is the newest version of the library, however the industry standard is still Angular 1.5, and so this project will rely on 1.5.




NodeJS is Javascript for the backend. In the MEAN stack, Node provides the server side functionality for the AngularJS user interface. It does so by exposing APIs through Express that Angular can then access for data to present to the user. Node is extremely powerful in that it processes asynchronously using promises or callbacks to allow the application to continue responding to additional requests until such time that the process is completed. This allows for faster processing time and lower response times for all users.


Why the Sign Up List


We chose to migrate the sign-up list Building Block for a number of reasons. First, it is simple enough that the migration wouldn't be extremely time-consuming, yet complex enough that we will be able to exercise the REST APIs in multiple ways. Perhaps more importantly, this Building Block is extremely well adopted.  This project is of particular significance for those migrating from Self- or Managed-Hosted Learn to the SaaS deployment and finding that the Building Block requires some refactoring to work in SaaS, but is also useful to Self- or Managed-Hosted interested in replacing the Sign Up List B2 with a RESTful implementation.