There are several popular SQL database engines, such as PostgreSQL, MySQL (https://www.npmjs.com/package/mysql), and MariaDB (https://www.npmjs.com/package/mariasql). Corresponding to each are Node.js client modules similar in nature to the sqlite3 module that we just used. The programmer is close to the SQL, which can be good in the same way that driving a stick shift car is fun. But what if we want a higher-level view of the database so that we can think in terms of objects rather than rows of a database table? Object Relation Mapping (ORM) systems provide such a higher-level interface and even offer the ability to use the same data model with several databases.
The Sequelize module (http://www.sequelizejs.com/) is Promise-based, offers strong, well-developed ORM features, and can connect with SQLite3, MySQL, PostgreSQL, MariaDB, and MSSQL. Because Sequelize is Promise-based, it will fit naturally with the Promise-based application code we're writing.
A prerequisite to most SQL database engines is having access to a database server. In the previous section, we skirted around that issue by using SQLite3, which requires no database server setup. While it's possible to install a database server on your laptop, we want to avoid the complexity of doing so, and will use Sequelize to manage an SQLite3 database. We'll also see that it's simply a matter of a configuration file to run the same Sequelize code against a hosted database such as MySQL. In Chapter 10, Deploying Node.js Applications, we'll learn how to use Docker to easily set up any service, including database servers, on our laptop and deploy the exact same configuration to a live server. Most web hosting providers offer MySQL or PostgreSQL as part of the service.
Before we start on the code, let's install two modules:
$ npm install sequelize@4.31.x --save $ npm install js-yaml@3.10.x --save
The first obviously installs the Sequelize package. The second, js-yaml, is installed so that we can implement a YAML-formatted file to store the Sequelize connection configuration. YAML is a human-readable data serialization language, which simply means YAML is an easy-to-use text file format to describe data objects. Perhaps the best place to learn about YAML is its Wikipedia page at https://en.wikipedia.org/wiki/YAML.