title | summary | toc | referral_id | docs_area | |
---|---|---|---|---|---|
Build a Node.js App with CockroachDB and Sequelize |
Learn how to use CockroachDB from a simple Node.js application with the Sequelize ORM. |
true |
false |
docs_node_sequelize |
get_started |
{% include {{ page.version.version }}/filter-tabs/crud-js.md %}
This tutorial shows you how build a simple Node.js application with CockroachDB and the Sequelize ORM.
{% include {{ page.version.version }}/setup/sample-setup.md %}
Clone the sample code's GitHub repo:
{% include_cached copy-clipboard.html %}
$ git clone https://github.com/cockroachlabs/example-app-node-sequelize
The sample code uses Sequelize to map Node.js-specific objects to some read and write SQL operations.
To start the app:
-
Set the
DATABASE_URL
environment variable to the connection string:{% include_cached copy-clipboard.html %}
$ export DATABASE_URL="postgresql://root@localhost:26257?sslmode=disable"
{% include_cached copy-clipboard.html %}
$ export DATABASE_URL="<connection-string>"
Where
<connection-string>
is the connection string you copied earlier.The app uses the connection string saved to the
DATABASE_URL
environment variable to connect to your cluster and execute the code. -
Install the app dependencies:
{% include_cached copy-clipboard.html %}
$ cd example-app-node-sequelize
{% include_cached copy-clipboard.html %}
$ npm install
-
Run the code:
{% include_cached copy-clipboard.html %}
$ node app.js
The output should look similar to the following:
Executing (default): SELECT version() AS version Executing (default): DROP TABLE IF EXISTS "accounts" CASCADE; Executing (default): SELECT crdb_internal.increment_feature_counter(concat('Sequelize ', '6.17')) Executing (default): SELECT crdb_internal.increment_feature_counter(concat('sequelize-cockroachdb ', '6.0.5')) Executing (default): CREATE TABLE IF NOT EXISTS "accounts" ("id" INTEGER , "balance" INTEGER, "createdAt" TIMESTAMP WITH TIME ZONE NOT NULL, "updatedAt" TIMESTAMP WITH TIME ZONE NOT NULL, PRIMARY KEY ("id")); Executing (default): SELECT i.relname AS name, ix.indisprimary AS primary, ix.indisunique AS unique, ix.indkey AS indkey, array_agg(a.attnum) as column_indexes, array_agg(a.attname) AS column_names, pg_get_indexdef(ix.indexrelid) AS definition FROM pg_class t, pg_class i, pg_index ix, pg_attribute a WHERE t.oid = ix.indrelid AND i.oid = ix.indexrelid AND a.attrelid = t.oid AND t.relkind = 'r' and t.relname = 'accounts' GROUP BY i.relname, ix.indexrelid, ix.indisprimary, ix.indisunique, ix.indkey ORDER BY i.relname; Executing (default): INSERT INTO "accounts" ("id","balance","createdAt","updatedAt") VALUES (1,1000,'2022-03-30 19:56:34.483 +00:00','2022-03-30 19:56:34.483 +00:00'),(2,250,'2022-03-30 19:56:34.483 +00:00','2022-03-30 19:56:34.483 +00:00') RETURNING "id","balance","createdAt","updatedAt"; Executing (default): SELECT "id", "balance", "createdAt", "updatedAt" FROM "accounts" AS "accounts"; 1 1000 2 250
Read more about using the Sequelize ORM, or check out a more realistic implementation of Sequelize with CockroachDB in our examples-orms
repository.
{% include {{ page.version.version }}/app/see-also-links.md %}