Join us at ScyllaDB LIVE, instructor-led NoSQL training sessions | June 18
Register now

Coding with Node.js

9 min to complete

In this lesson, we will explore how to connect to a ScyllaDB cluster using the Node.js driver.

When creating applications that communicate with a database such as ScyllaDB, the programming language being used must have support for database connectivity. Since ScyllaDB is compatible with Cassandra, we can use any of the available Cassandra libraries. In Node.js, we use the cassandra-driver. Let’s begin by writing a sample Node.js application.

Creating a Sample Node.js Application

The sample application that we will go over will connect to a ScyllaDB cluster, display the contents of the Mutant Catalog table, insert and delete data, and show the contents of the table after each action. We will first go through each section of the code that will be used and then explain how to run the code in a Docker container that will access the ScyllaDB Mutant Monitoring cluster. You can see this file here: scylla-code-samples/mms/nodejs/nodejs-app/part1_app.js

In the application, we first need to import the necessary libraries and modules:

The cassandra-driver client library provides the ability to connect to the cluster and interact with it. The async module enables us to control the order in which functions are executed. 

The code is stored in a file called part1_app.js. We define the client contact points, datacenter, and keyspace to use, and then we connect to the cluster:

To display the data, we will need to create a function that will run a select statement from the ScyllaDB cluster. The function below will use the defined client object to gather the data and write the first and last name to the log:

The next function is used to insert a new Mutant into the Mutant Catalog table, again using the client object:

After the data is added, we use the following delete function to remove it:

Finally, we will close the client connection:

With the coding part done, let’s set up the ScyllaDB Cluster and then run the sample application in Docker.

Setting up the ScyllaDB Cluster

The example requires a single DC cluster. Follow this procedure to remove previous clusters and set up a new cluster.

Once the cluster is up, we’ll create the catalog keyspace and populate it with data.

The first task is to create the keyspace for the catalog.

docker exec -it scylla-node1 cqlsh
CREATE KEYSPACE catalog WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy','DC1' : 3};

Now that the keyspace is created, it is time to create the table.

use catalog;
CREATE TABLE mutant_data (
   first_name text,
   last_name text,
   address text,
   picture_location text,
   PRIMARY KEY((first_name, last_name)));

Now let’s add a few mutants to the catalog with the following statements:

insert into mutant_data ("first_name","last_name","address","picture_location") VALUES ('Bob','Loblaw','1313 Mockingbird Lane', '');
insert into mutant_data ("first_name","last_name","address","picture_location") VALUES ('Bob','Zemuda','1202 Coffman Lane', '');
insert into mutant_data ("first_name","last_name","address","picture_location") VALUES ('Jim','Jeffries','1211 Hollywood Lane', '');

Building the Node.js Example

Exit the CQL Shell if you’re still in it:


To build the application in Docker, change into the nodejs subdirectory in scylla-code-samples:

cd scylla-code-samples/mms/nodejs

Now we can build and run the container:

docker build -t nodejs-app .
docker run -d --net=mms_web --name some-nodejs-app nodejs-app

Viewing the Run Results

Once the Node.js app is run in the container, we can see the output by printing the logs:

docker logs some-nodejs-app

The output of the application will be:


In this lesson, we explained how to create a sample Node.js application that executes a few basic CQL statements with a ScyllaDB cluster using the nodejs-driver. This is only the basics, and there are more exciting topics that Division 3 wants developers to explore. 

In the meantime, please be safe out there and continue to monitor the mutants!