Skip to content

Commit

Permalink
nodejs basic example
Browse files Browse the repository at this point in the history
  • Loading branch information
nellicus committed Nov 22, 2023
1 parent c48a6b6 commit b4e49b4
Showing 1 changed file with 119 additions and 0 deletions.
119 changes: 119 additions & 0 deletions knowledgebase/node-js-example.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
---
date: 2023-11-22
title: A simple nodeJS example using @clickhouse/client
---

# A basic NodeJS example using @clickhouse/client

Here is a basic code snippet file`main.ts`.

`Package.json` (place it under `./`):

```json
{
"name": "a simple clickhouse client example",
"version": "1.0.0",
"main": "main.js",
"license": "MIT",
"devDependencies": {
"typescript": "^5.3.2"
},
"dependencies": {
"@clickhouse/client": "^0.2.6"
}
}
```

`Main.ts` (place it under `./src`):

```ts
import { ClickHouseClient, createClient } from '@clickhouse/client'; // or '@clickhouse/client-web'

interface ClickHouseResultSet<T> {
meta: Meta[];
data: T[];
rows: number;
statistics: Statistics;
}

interface Statistics {
elapsed: number;
rows_read: number;
bytes_read: number;
}

interface Meta {
name: string;
type: string;
}

interface Count {
c: number;
}

//Please replace client connection parameters like`host`
//`username`, `passowrd`, `database` as needed.

const initClickHouseClient = async (): Promise<ClickHouseClient> => {
const client = createClient({
host: 'https://FQDN.aws.clickhouse.cloud',
username: 'default',
password: 'password',
database: 'default',
application: `pingpong`,
});

console.log('ClickHouse ping');
if (!(await client.ping())) {
throw new Error('failed to ping clickhouse!');
}
console.log('ClickHouse pong!');
return client;
};

const main = async () => {
console.log('Initialising clickhouse client');
const client = await initClickHouseClient();

const row = await client.query({
query: `SELECT count() AS c FROM system.tables WHERE database='system'`,
});

const jsonRow: ClickHouseResultSet<Count> = await row.json();

console.log(`I have found ${jsonRow.data[0].c} system tables!`);

await client.close();
console.log(`πŸ‘‹`);
};

main();
```

To install the packages, run `yarn` from `./`:

```
$ yarn
yarn install v1.22.19
[1/4] πŸ” Resolving packages...
[2/4] 🚚 Fetching packages...
[3/4] πŸ”— Linking dependencies...
[4/4] πŸ”¨ Building fresh packages...
✨ Done in 0.14s.
```


execute the code in `main.ts` from `./` with:
```
$ npx ts-node src/main.ts
```

will output:
```
Initialising clickhouse client
ClickHouse ping
ClickHouse pong!
I have found 120 system tables!
πŸ‘‹
```

0 comments on commit b4e49b4

Please sign in to comment.