const{ Sender }=require("@questdb/nodejs-client");asyncfunctionrun(){// create a sender with a 4k buffer// it is important to size the buffer correctly so messages can fitconstsender=newSender({bufferSize: 4096});// connect to QuestDB// host and port are required in connect optionsawaitsender.connect({port: 9009,host: "localhost"});// add rows to the buffer of the sendersender.table("prices").symbol("instrument","EURUSD").floatColumn("bid",1.0195).floatColumn("ask",1.0221).atNow();sender.table("prices").symbol("instrument","GBPUSD").floatColumn("bid",1.2076).floatColumn("ask",1.2082).atNow();// flush the buffer of the sender, sending the data to QuestDB// the buffer is cleared after the data is sent and the sender is ready to accept new dataawaitsender.flush();// add rows to the buffer again and send it to the serversender.table("prices").symbol("instrument","EURUSD").floatColumn("bid",1.0197).floatColumn("ask",1.0224).atNow();awaitsender.flush();// close the connection after all rows ingestedawaitsender.close();returnnewPromise(resolve=>resolve(0));}run().then(value=>console.log(value)).catch(err=>console.log(err));
Authentication and secure connection
const{ Sender }=require("@questdb/nodejs-client");asyncfunctionrun(){// construct a JsonWebKeyconstCLIENT_ID="testapp";constPRIVATE_KEY="9b9x5WhJywDEuo1KGQWSPNxtX-6X6R2BRCKhYMMY6n8";constPUBLIC_KEY={x: "aultdA0PjhD_cWViqKKyL5chm6H1n-BiZBo_48T-uqc",y: "__ptaol41JWSpTTL525yVEfzmY8A6Vi_QrW1FjKcHMg"};constJWK={
...PUBLIC_KEY,d: PRIVATE_KEY,kid: CLIENT_ID,kty: "EC",crv: "P-256",};// pass the JsonWebKey to the sender// will use it for authenticationconstsender=newSender({bufferSize: 4096,jwk: JWK});// connect() takes an optional second argument// if 'true' passed the connection is secured with TLS encryptionawaitsender.connect({port: 9009,host: "localhost"},true);// send the data over the authenticated and secure connectionsender.table("prices").symbol("instrument","EURUSD").floatColumn("bid",1.0197).floatColumn("ask",1.0224).atNow();awaitsender.flush();// close the connection after all rows ingestedawaitsender.close();returnnewPromise(resolve=>resolve(0));}run().then(value=>console.log(value)).catch(err=>console.log(err));
TypeScript example
import{Sender}from"@questdb/nodejs-client";asyncfunctionrun(): Promise<number>{// construct a JsonWebKeyconstCLIENT_ID: string="testapp";constPRIVATE_KEY: string="9b9x5WhJywDEuo1KGQWSPNxtX-6X6R2BRCKhYMMY6n8";constPUBLIC_KEY: {x: string,y: string}={x: "aultdA0PjhD_cWViqKKyL5chm6H1n-BiZBo_48T-uqc",y: "__ptaol41JWSpTTL525yVEfzmY8A6Vi_QrW1FjKcHMg"};constJWK: {x: string,y: string,kid: string,kty: string,d: string,crv: string}={
...PUBLIC_KEY,d: PRIVATE_KEY,kid: CLIENT_ID,kty: "EC",crv: "P-256",};// pass the JsonWebKey to the sender// will use it for authenticationconstsender: Sender=newSender({bufferSize: 4096,jwk: JWK});// connect() takes an optional second argument// if 'true' passed the connection is secured with TLS encryptionawaitsender.connect({port: 9009,host: "localhost"},true);// send the data over the authenticated and secure connectionsender.table("prices").symbol("instrument","EURUSD").floatColumn("bid",1.0197).floatColumn("ask",1.0224).atNow();awaitsender.flush();// close the connection after all rows ingestedawaitsender.close();returnnewPromise(resolve=>resolve(0));}run().then(value=>console.log(value)).catch(err=>console.log(err));