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.
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
http://localhost:3000
.
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 sequelize@2.0.0-rc1 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 config
,
migrations
and models
.
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 sequelize model:create
.
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
User
.
The file 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.