Build a TypeScript App with CockroachDB and TypeORM

This tutorial shows you how run a simple application built with TypeORM.

Step 1. Start CockroachDB

Create a free cluster

  1. If you haven't already, sign up for a CockroachDB Cloud account.
  2. Log in to your CockroachDB Cloud account.
  3. On the Clusters page, click Create Cluster.
  4. On the Create your cluster page, select Serverless.

    Unless you change your monthly budget, this cluster will be free forever.

  5. Click Create cluster.

    Your cluster will be created in a few seconds and the Create SQL user dialog will display.

Create a SQL user

The Create SQL user dialog allows you to create a new SQL user and password.

  1. Enter a username in the SQL user field or use the one provided by default.
  2. Click Generate & save password.
  3. Copy the generated password and save it in a secure location.
  4. Click Next.

    Currently, all new users are created with full privileges. For more information and to change the default settings, see Granting privileges and Using roles.

Get the connection information

The Connect to cluster dialog shows information about how to connect to your cluster.

  1. Select Parameters only from the Select option dropdown.
  2. Copy the connection information for each parameter displayed and save it in a secure location.
  1. If you haven't already, download the CockroachDB binary.
  2. Run the cockroach start-single-node command:

    icon/buttons/copy
    $ cockroach start-single-node --advertise-addr 'localhost' --insecure
    

    This starts an insecure, single-node cluster.

  3. Take note of the following connection information in the SQL shell welcome text:

    CockroachDB node starting at 2021-08-30 17:25:30.06524 +0000 UTC (took 4.3s)
    build:               CCL v21.1.6 @ 2021/07/20 15:33:43 (go1.15.11)
    webui:               http://localhost:8080
    sql:                 postgresql://root@localhost:26257?sslmode=disable
    

    You'll use the sql connection string to connect to the cluster later in this tutorial.

Warning:

The --insecure flag used in this tutorial is intended for non-production testing only. To run CockroachDB in production, use a secure cluster instead.

Step 2. Get the code

  1. Clone the code's GitHub repository:

    icon/buttons/copy
    $ git clone git@github.com:cockroachlabs/example-app-typescript-typeorm.git
    
  2. Navigate to the repo directory and install the application dependencies:

    icon/buttons/copy
    $ cd example-app-typescript-typeorm
    
    icon/buttons/copy
    $ npm install
    

Step 3. Configure your CockroachDB connection

  1. Open the datasource.ts file, and comment out the ssl: true, extra and options configuration properties.

  2. In the datasource.ts file, uncomment ssl: { rejectUnauthorized: false }.

    Warning:

    Only use ssl: { rejectUnauthorized: false } in development, for insecure connections.

    The DataSource configuration should look similar to the following:

    export const AppDataSource = new DataSource({
        type: "cockroachdb",
        url: process.env.DATABASE_URL,
        ssl: { rejectUnauthorized: false }, // For insecure connections only
        /* ssl: true,
        extra: {
            options: "--cluster=<routing-id>"
        }, */
        synchronize: true,
        logging: false,
        entities: ["src/entity/**/*.ts"],
        migrations: ["src/migration/**/*.ts"],
        subscribers: ["src/subscriber/**/*.ts"],
    })
    
  3. Set the DATABASE_URL environment variable to the connection string provided in the cockroach welcome text:

    icon/buttons/copy
    export DATABASE_URL="postgresql://root@localhost:26257?sslmode=disable"
    
  1. Open the datasource.ts file, and edit the options: "--cluster=<routing-id>" configuration property to specify the routing ID to your serverless cluster.

  2. Set the DATABASE_URL environment variable to a CockroachDB connection string compatible with TypeORM.

    icon/buttons/copy
    export DATABASE_URL="<connection-string>"
    

    TypeORM accepts the following format for CockroachDB Serverless (beta) connection strings:

    icon/buttons/copy
    postgresql://<username>:<password>@<host>:<port>/<database>
    

Step 4. Run the code

Start the application:

icon/buttons/copy
$ npm start

You should see the following output in your terminal:

Inserting a new account into the database...
Saved a new account.
Printing balances from account 1db0f34a-55e8-42e7-adf1-49e76010b763.
[
  Account { id: '1db0f34a-55e8-42e7-adf1-49e76010b763', balance: 1000 }
]
Inserting a new account into the database...
Saved a new account.
Printing balances from account 4e26653a-3821-48c8-a481-47eb73b3e4cc.
[
  Account { id: '4e26653a-3821-48c8-a481-47eb73b3e4cc', balance: 250 }
]
Transferring 500 from account 1db0f34a-55e8-42e7-adf1-49e76010b763 to account 4e26653a-3821-48c8-a481-47eb73b3e4cc.
Transfer complete.
Printing balances from account 1db0f34a-55e8-42e7-adf1-49e76010b763.
[
  Account { id: '1db0f34a-55e8-42e7-adf1-49e76010b763', balance: 1000 }
]
Printing balances from account 4e26653a-3821-48c8-a481-47eb73b3e4cc.
[
  Account { id: '4e26653a-3821-48c8-a481-47eb73b3e4cc', balance: 250 }
]

What's next?

Read more about using the TypeORM.

You might also be interested in the following pages:

YesYes NoNo