Build a Node.js App with CockroachDB

On this page Carat arrow pointing down

This tutorial shows you how build a simple Node.js application with CockroachDB using a PostgreSQL-compatible driver or ORM.

We have tested the Node.js pg driver and the Sequelize ORM enough to claim beta-level support, so those are featured here. If you encounter problems, please open an issue with details to help us make progress toward full support.

Tip:
For a more realistic use of Sequelize with CockroachDB, see our examples-orms repository.

Before You Begin

Make sure you have already installed CockroachDB.

Step 1. Install the Sequelize ORM

To install Sequelize, as well as a CockroachDB Node.js package that accounts for some minor differences between CockroachDB and PostgreSQL, run the following command:

icon/buttons/copy
$ npm install sequelize sequelize-cockroachdb 

Step 2. Start a single-node cluster

For the purpose of this tutorial, you need only one CockroachDB node running in insecure mode:

icon/buttons/copy
$ cockroach start \ --insecure \ --store=hello-1 \ --host=localhost 

Step 3. Create a user

In a new terminal, as the root user, use the cockroach user command to create a new user, maxroach.

icon/buttons/copy
$ cockroach user set maxroach --insecure 

Step 4. Create a database and grant privileges

As the root user, use the built-in SQL client to create a bank database.

icon/buttons/copy
$ cockroach sql --insecure -e 'CREATE DATABASE bank' 

Then grant privileges to the maxroach user.

icon/buttons/copy
$ cockroach sql --insecure -e 'GRANT ALL ON DATABASE bank TO maxroach' 

Step 5. Run the Node.js code

The following code uses the Sequelize ORM to map Node.js-specific objects to SQL operations. Specifically, Account.sync({force: true}) creates an accounts table based on the Account model (or drops and recreates the table if it already exists), Account.bulkCreate([...]) inserts rows into the table, and Account.findAll() selects from the table so that balances can be printed.

Copy the code or download it directly.

icon/buttons/copy
var Sequelize = require('sequelize-cockroachdb'); // Connect to CockroachDB through Sequelize. var sequelize = new Sequelize('bank', 'maxroach', '', { dialect: 'postgres', port: 26257, logging: false }); // Define the Account model for the "accounts" table. var Account = sequelize.define('accounts', { id: { type: Sequelize.INTEGER, primaryKey: true }, balance: { type: Sequelize.INTEGER } }); // Create the "accounts" table. Account.sync({force: true}).then(function() { // Insert two rows into the "accounts" table. return Account.bulkCreate([ {id: 1, balance: 1000}, {id: 2, balance: 250} ]); }).then(function() { // Retrieve accounts. return Account.findAll(); }).then(function(accounts) { // Print out the balances. accounts.forEach(function(account) { console.log(account.id + ' ' + account.balance); }); process.exit(0); }).catch(function(err) { console.error('error: ' + err.message); process.exit(1); }); 

Then run the code:

icon/buttons/copy
$ node sequelize-basic-sample.js 

The output should be:

1 1000 2 250 

To verify that the table and rows were created successfully, you can again use the built-in SQL client:

icon/buttons/copy
$ cockroach sql --insecure -e 'SHOW TABLES' --database=bank 
+----------+ | Table | +----------+ | accounts | +----------+ (1 row) 
icon/buttons/copy
$ cockroach sql --insecure -e 'SELECT id, balance FROM accounts' --database=bank 
+----+---------+ | id | balance | +----+---------+ | 1 | 1000 | | 2 | 250 | +----+---------+ (2 rows) 

What's Next?

Read more about using the Sequelize ORM, or check out a more realistic implementation of Sequelize with CockroachDB in our examples-orms repository.

You might also be interested in using a local cluster to explore the following CockroachDB benefits:

×