This article explains the usage of Sequelize with the MVC framework Express.You will learn how and where to define models and how to load them when needed.
A minimal express application
In order to create a minimal express application, we need to install express first and scaffold a project. We can do this via the following commands:
$ mkdir example-app $ cd example-app $ npm install express express-generator $ node_modules/.bin/express . -f $ npm install $ ./bin/www
You should now be able to see a tiny welcome page on
Adding Sequelize to the application
Now that we have the express application in place, we can start adding Sequelize to it. What we need for that are the following packages: sequelize, sequelize-cli, sqlite3. Please note, that for the sake of simplicity this tutorial will use SQLite.
$ npm install --save [email protected] sequelize-cli sqlite3
This will install the respective packages and uses the upcoming major release of sequelize. We can now let the sequelize CLI initialize the project's directory:
$ node_modules/.bin/sequelize init
Running this command will create the folders
Implementing a todo app
As an example application we will create a very basic and simple todo tool, which allows the creation of users and the management of their tasks.
In order to create a maintainable application, we will put all the database logic into the
models folder. When the application gets fired up, sequelize will sync the models with the database and afterwards start the server. This way we don't clutter the application while making use of sequelize's features.
This file has been generated with the sequelize CLI and collects all the models from the
models directory and associates them if needed.
All models of our application are located as separate files in the
models folder. If you want to add a new model, just add it to this folder and everything will work automagically. Also you can use the sequelize CLI's
Notice that the
associate method receives a parameter
models, which contains every declared model within the models directory.
The other needed model is
Task. It relates to the
routes/index.js contains the logic for a request against the main homepage. It loads the models module and uses it to load all the users and tasks from the database.
This will allow us to iterate over the users in the view file. We will skip the rest of the route files for this article.
As we passed the users to the view and include the tasks for each user, we can access the data in the view's template file. Besides listing the users and tasks, there are also forms for creating new instances.
This article shows a basic approach of how to integrate Sequelize into an ExpressJS application. It allows the very easy management of models by adding new files to a specific folder. Starting the application will automatically sync the schema with the database.
If you don't want to have automatic schema synchronization and instead want migrations, just add a respective step to your deployment script. When you use the CLI for the model generation, you will gain the migration scripts for free as well.
You can find the complete application code on Github. Feel free to add pull requests to it.
Besides the use of Sequelize as model backend in your ExpressJS application, you might also want to turn your server into a restful API. If that is the case, check out the repository on Github