fix: update nodejs example for 3.0 (#19765)
This commit is contained in:
parent
2783d914a2
commit
2871fe12d8
|
@ -1,135 +0,0 @@
|
||||||
/* This example is to show how to use the td-connector through the cursor only and is a bit more raw.
|
|
||||||
* No promises, object wrappers around data, functions that prettify the data, or anything.
|
|
||||||
* The cursor will generally use callback functions over promises, and return and store the raw data from the C Interface.
|
|
||||||
* It is advised to use the td-connector through the cursor and the TaosQuery class amongst other higher level APIs.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Get the td-connector package
|
|
||||||
const taos = require('td2.0-connector');
|
|
||||||
|
|
||||||
/* We will connect to TDengine by passing an object comprised of connection options to taos.connect and store the
|
|
||||||
* connection to the variable conn
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* Connection Options
|
|
||||||
* host: the host to connect to
|
|
||||||
* user: the use to login as
|
|
||||||
* password: the password for the above user to login
|
|
||||||
* config: the location of the taos.cfg file, by default it is in /etc/taos
|
|
||||||
* port: the port we connect through
|
|
||||||
*/
|
|
||||||
var conn = taos.connect({host:"127.0.0.1", user:"root", password:"taosdata", config:"/etc/taos",port:0});
|
|
||||||
|
|
||||||
// Initialize our TDengineCursor, which we use to interact with TDengine
|
|
||||||
var c1 = conn.cursor();
|
|
||||||
|
|
||||||
// c1.execute(query) will execute the query
|
|
||||||
// Let's create a database named db
|
|
||||||
try {
|
|
||||||
c1.execute('create database if not exists db;');
|
|
||||||
}
|
|
||||||
catch(err) {
|
|
||||||
conn.close();
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Now we will use database db
|
|
||||||
try {
|
|
||||||
c1.execute('use db;');
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
conn.close();
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Let's create a table called weather
|
|
||||||
// which stores some weather data like humidity, AQI (air quality index), temperature, and some notes as text
|
|
||||||
try {
|
|
||||||
c1.execute('create table if not exists weather (ts timestamp, humidity smallint, aqi int, temperature float, notes binary(30));');
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
conn.close();
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Let's get the description of the table weather
|
|
||||||
try {
|
|
||||||
c1.execute('describe db.weather');
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
conn.close();
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
|
|
||||||
// To get results, we run the function c1.fetchall()
|
|
||||||
// It only returns the query results as an array of result rows, but also stores the latest results in c1.data
|
|
||||||
try {
|
|
||||||
var tableDesc = c1.fetchall(); // The description variable here is equal to c1.data;
|
|
||||||
console.log(tableDesc);
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
conn.close();
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Let's try to insert some random generated data to test with
|
|
||||||
|
|
||||||
let stime = new Date();
|
|
||||||
let interval = 1000;
|
|
||||||
|
|
||||||
// Timestamps must be in the form of "YYYY-MM-DD HH:MM:SS.MMM" if they are in milliseconds
|
|
||||||
// "YYYY-MM-DD HH:MM:SS.MMMMMM" if they are in microseconds
|
|
||||||
// Thus, we create the following function to convert a javascript Date object to the correct formatting
|
|
||||||
function convertDateToTS(date) {
|
|
||||||
let tsArr = date.toISOString().split("T")
|
|
||||||
return "\"" + tsArr[0] + " " + tsArr[1].substring(0, tsArr[1].length-1) + "\"";
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
for (let i = 0; i < 10000; i++) {
|
|
||||||
stime.setMilliseconds(stime.getMilliseconds() + interval);
|
|
||||||
let insertData = [convertDateToTS(stime),
|
|
||||||
parseInt(Math.random()*100),
|
|
||||||
parseInt(Math.random()*300),
|
|
||||||
parseFloat(Math.random()*10 + 30),
|
|
||||||
"\"random note!\""];
|
|
||||||
c1.execute('insert into db.weather values(' + insertData.join(',') + ' );');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
conn.close();
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Now let's look at our newly inserted data
|
|
||||||
var retrievedData;
|
|
||||||
try {
|
|
||||||
c1.execute('select * from db.weather;')
|
|
||||||
retrievedData = c1.fetchall();
|
|
||||||
|
|
||||||
// c1.fields stores the names of each column retrieved
|
|
||||||
console.log(c1.fields);
|
|
||||||
console.log(retrievedData);
|
|
||||||
// timestamps retrieved are always JS Date Objects
|
|
||||||
// Numbers are numbers, big ints are big ints, and strings are strings
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
conn.close();
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Let's try running some basic functions
|
|
||||||
try {
|
|
||||||
c1.execute('select count(*), avg(temperature), max(temperature), min(temperature), stddev(temperature) from db.weather;')
|
|
||||||
c1.fetchall();
|
|
||||||
console.log(c1.fields);
|
|
||||||
console.log(c1.data);
|
|
||||||
}
|
|
||||||
catch(err) {
|
|
||||||
conn.close();
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
|
|
||||||
conn.close();
|
|
||||||
|
|
||||||
// Feel free to fork this repository or copy this code and start developing your own apps and backends with NodeJS and TDengine!
|
|
|
@ -1,153 +0,0 @@
|
||||||
/* This example is to show the preferred way to use the td-connector */
|
|
||||||
/* To run, enter node path/to/node-example.js */
|
|
||||||
// Get the td-connector package
|
|
||||||
const taos = require('td2.0-connector');
|
|
||||||
|
|
||||||
/* We will connect to TDengine by passing an object comprised of connection options to taos.connect and store the
|
|
||||||
* connection to the variable conn
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* Connection Options
|
|
||||||
* host: the host to connect to
|
|
||||||
* user: the use to login as
|
|
||||||
* password: the password for the above user to login
|
|
||||||
* config: the location of the taos.cfg file, by default it is in /etc/taos
|
|
||||||
* port: the port we connect through
|
|
||||||
*/
|
|
||||||
var conn = taos.connect({host:"127.0.0.1", user:"root", password:"taosdata", config:"/etc/taos",port:0});
|
|
||||||
|
|
||||||
// Initialize our TDengineCursor, which we use to interact with TDengine
|
|
||||||
var c1 = conn.cursor();
|
|
||||||
|
|
||||||
// c1.query(query) will return a TaosQuery object, of which then we can execute. The execute function then returns a promise
|
|
||||||
// Let's create a database named db
|
|
||||||
try {
|
|
||||||
c1.execute('create database if not exists db;');
|
|
||||||
//var query = c1.query('create database if not exists db;');
|
|
||||||
//query.execute();
|
|
||||||
}
|
|
||||||
catch(err) {
|
|
||||||
conn.close();
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Now we will use database db. As this query won't return any results,
|
|
||||||
// we can simplify the code and directly use the c1.execute() function. No need for a TaosQuery object to wrap around the query
|
|
||||||
try {
|
|
||||||
c1.execute('use db;');
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
conn.close();
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Let's create a table called weather
|
|
||||||
// which stores some weather data like humidity, AQI (air quality index), temperature, and some notes as text
|
|
||||||
// We can also immedietely execute a TaosQuery object by passing true as the secodn argument
|
|
||||||
// This will then return a promise that we can then attach a callback function to
|
|
||||||
try {
|
|
||||||
var promise = c1.query('create table if not exists weather (ts timestamp, humidity smallint, aqi int, temperature float, notes binary(30));', true);
|
|
||||||
promise.then(function(){
|
|
||||||
console.log("Table created!");
|
|
||||||
}).catch(function() {
|
|
||||||
console.log("Table couldn't be created.")
|
|
||||||
});
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
conn.close();
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Let's get the description of the table weather
|
|
||||||
// When using a TaosQuery object and then executing it, upon success it returns a TaosResult object, which is a wrapper around the
|
|
||||||
// retrieved data and allows us to easily access data and manipulate or display it.
|
|
||||||
try {
|
|
||||||
c1.query('describe db.weather;').execute().then(function(result){
|
|
||||||
// Result is an instance of TaosResult and has the function pretty() which instantly logs a prettified version to the console
|
|
||||||
result.pretty();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
conn.close();
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Date.prototype.Format = function(fmt){
|
|
||||||
var o = {
|
|
||||||
'M+': this.getMonth() + 1,
|
|
||||||
'd+': this.getDate(),
|
|
||||||
'H+': this.getHours(),
|
|
||||||
'm+': this.getMinutes(),
|
|
||||||
's+': this.getSeconds(),
|
|
||||||
'S+': this.getMilliseconds()
|
|
||||||
};
|
|
||||||
if (/(y+)/.test(fmt)) {
|
|
||||||
fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length));
|
|
||||||
}
|
|
||||||
for (var k in o) {
|
|
||||||
if (new RegExp('(' + k + ')').test(fmt)) {
|
|
||||||
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (('00' + o[k]).substr(String(o[k]).length)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return fmt;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Let's try to insert some random generated data to test with
|
|
||||||
// We will use the bind function of the TaosQuery object to easily bind values to question marks in the query
|
|
||||||
// For Timestamps, a normal Datetime object or TaosTimestamp or milliseconds can be passed in through the bind function
|
|
||||||
let stime = new Date();
|
|
||||||
let interval = 1000;
|
|
||||||
try {
|
|
||||||
for (let i = 0; i < 1000; i++) {
|
|
||||||
stime.setMilliseconds(stime.getMilliseconds() + interval);
|
|
||||||
|
|
||||||
//console.log(stime.Format('yyyy-MM-dd HH:mm:ss.SSS'));
|
|
||||||
|
|
||||||
let insertData = [stime,
|
|
||||||
parseInt(Math.random()*100),
|
|
||||||
parseInt(Math.random()*300),
|
|
||||||
parseFloat(Math.random()*10 + 30),
|
|
||||||
"Note"];
|
|
||||||
//c1.execute('insert into db.weather values(' + insertData.join(',') + ' );');
|
|
||||||
|
|
||||||
//var query = c1.query('insert into db.weather values(?, ?, ?, ?, ?);').bind(insertData);
|
|
||||||
//query.execute();
|
|
||||||
c1.execute('insert into db.weather values(\"'+stime.Format('yyyy-MM-dd HH:mm:ss.SSS')+'\",'+parseInt(Math.random() * 100)+','+parseInt(Math.random() * 300)+','+parseFloat(Math.random()*10 + 30)+',"Note");');
|
|
||||||
}
|
|
||||||
}catch (err) {
|
|
||||||
conn.close();
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Now let's look at our newly inserted data
|
|
||||||
var retrievedData;
|
|
||||||
try {
|
|
||||||
c1.query('select * from db.weather limit 5 offset 100;', true).then(function(result){
|
|
||||||
//result.pretty();
|
|
||||||
console.log('=========>'+JSON.stringify(result));
|
|
||||||
// Neat!
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
catch (err) {
|
|
||||||
conn.close();
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Let's try running some basic functions
|
|
||||||
try {
|
|
||||||
c1.query('select count(*), avg(temperature), max(temperature), min(temperature), stddev(temperature) from db.weather;', true)
|
|
||||||
.then(function(result) {
|
|
||||||
result.pretty();
|
|
||||||
})
|
|
||||||
}
|
|
||||||
catch(err) {
|
|
||||||
conn.close();
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
|
|
||||||
conn.close();
|
|
||||||
|
|
||||||
// Feel free to fork this repository or copy this code and start developing your own apps and backends with NodeJS and TDengine!
|
|
|
@ -1,29 +1,27 @@
|
||||||
const taos = require('td2.0-connector');
|
const taos = require("@tdengine/client");
|
||||||
//const taos = require('../../../src/connector/nodejs/');
|
|
||||||
|
|
||||||
|
|
||||||
var host = null;
|
var host = null;
|
||||||
var port = 6030;
|
var port = 6030;
|
||||||
for(var i = 2; i < global.process.argv.length; i++){
|
for(var i = 2; i < global.process.argv.length; i++){
|
||||||
var key = global.process.argv[i].split("=")[0];
|
var key = global.process.argv[i].split("=")[0];
|
||||||
var value = global.process.argv[i].split("=")[1];
|
var value = global.process.argv[i].split("=")[1];
|
||||||
|
|
||||||
if("host" == key){
|
if("host" == key){
|
||||||
host = value;
|
host = value;
|
||||||
}
|
}
|
||||||
if("port" == key){
|
if("port" == key){
|
||||||
port = value;
|
port = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(host == null){
|
if(host == null){
|
||||||
console.log("Usage: node nodejsChecker.js host=<hostname> port=<port>");
|
console.log("Usage: node nodejsChecker.js host=<hostname> port=<port>");
|
||||||
process.exit(0);
|
process.exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// establish connection
|
// establish connection
|
||||||
var conn = taos.connect({host:host, user:"root", password:"taosdata",port:port});
|
var conn = taos.connect({host:host, user:"root", password:"taosdata",port:port});
|
||||||
var cursor = conn.cursor();
|
var cursor = conn.cursor();
|
||||||
// create database
|
// create database
|
||||||
executeSql("create database if not exists test", 0);
|
executeSql("create database if not exists test", 0);
|
||||||
// use db
|
// use db
|
||||||
|
@ -40,22 +38,22 @@ executeQuery("select * from test.weather");
|
||||||
conn.close();
|
conn.close();
|
||||||
|
|
||||||
function executeQuery(sql){
|
function executeQuery(sql){
|
||||||
var start = new Date().getTime();
|
var start = new Date().getTime();
|
||||||
var promise = cursor.query(sql, true);
|
var promise = cursor.query(sql, true);
|
||||||
var end = new Date().getTime();
|
var end = new Date().getTime();
|
||||||
promise.then(function(result){
|
promise.then(function(result){
|
||||||
printSql(sql, result != null,(end - start));
|
printSql(sql, result != null,(end - start));
|
||||||
result.pretty();
|
result.pretty();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function executeSql(sql, affectRows){
|
function executeSql(sql, affectRows){
|
||||||
var start = new Date().getTime();
|
var start = new Date().getTime();
|
||||||
var promise = cursor.execute(sql);
|
var promise = cursor.execute(sql);
|
||||||
var end = new Date().getTime();
|
var end = new Date().getTime();
|
||||||
printSql(sql, promise == affectRows, (end - start));
|
printSql(sql, promise == affectRows, (end - start));
|
||||||
}
|
}
|
||||||
|
|
||||||
function printSql(sql, succeed, cost){
|
function printSql(sql, succeed, cost){
|
||||||
console.log("[ "+(succeed ? "OK" : "ERROR!")+" ] time cost: " + cost + " ms, execute statement ====> " + sql);
|
console.log("[ "+(succeed ? "OK" : "ERROR!")+" ] time cost: " + cost + " ms, execute statement ====> " + sql);
|
||||||
}
|
}
|
|
@ -1,125 +0,0 @@
|
||||||
const taos = require('td2.0-connector');
|
|
||||||
var conn = taos.connect({host:"127.0.0.1", user:"root", password:"taosdata", config:"/etc/taos",port:0})
|
|
||||||
var c1 = conn.cursor(); // Initializing a new cursor
|
|
||||||
|
|
||||||
let stime = new Date();
|
|
||||||
let interval = 1000;
|
|
||||||
|
|
||||||
function convertDateToTS(date) {
|
|
||||||
let tsArr = date.toISOString().split("T")
|
|
||||||
return "\"" + tsArr[0] + " " + tsArr[1].substring(0, tsArr[1].length - 1) + "\"";
|
|
||||||
}
|
|
||||||
|
|
||||||
function R(l, r) {
|
|
||||||
return Math.random() * (r - l) - r;
|
|
||||||
}
|
|
||||||
|
|
||||||
function randomBool() {
|
|
||||||
if (Math.random() < 0.5) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initialize
|
|
||||||
const dbname = "nodejs_1970_db";
|
|
||||||
const tbname = "t1";
|
|
||||||
|
|
||||||
let dropDB = "drop database if exists " + dbname
|
|
||||||
console.log(dropDB);//asdasdasd
|
|
||||||
c1.execute(dropDB);///asdasd
|
|
||||||
|
|
||||||
let createDB = "create database " + dbname + " keep 36500"
|
|
||||||
console.log(createDB);
|
|
||||||
c1.execute(createDB);
|
|
||||||
|
|
||||||
let useTbl = "use " + dbname
|
|
||||||
console.log(useTbl)
|
|
||||||
c1.execute(useTbl);
|
|
||||||
|
|
||||||
let createTbl = "create table if not exists " + tbname + "(ts timestamp,id int)"
|
|
||||||
console.log(createTbl);
|
|
||||||
c1.execute(createTbl);
|
|
||||||
|
|
||||||
//1969-12-31 23:59:59.999
|
|
||||||
//1970-01-01 00:00:00.000
|
|
||||||
//1970-01-01 07:59:59.999
|
|
||||||
//1970-01-01 08:00:00.000a
|
|
||||||
//1628928479484 2021-08-14 08:07:59.484
|
|
||||||
let sql1 = "insert into " + dbname + "." + tbname + " values('1969-12-31 23:59:59.999',1)"
|
|
||||||
console.log(sql1);
|
|
||||||
c1.execute(sql1);
|
|
||||||
|
|
||||||
let sql2 = "insert into " + dbname + "." + tbname + " values('1970-01-01 00:00:00.000',2)"
|
|
||||||
console.log(sql2);
|
|
||||||
c1.execute(sql2);
|
|
||||||
|
|
||||||
let sql3 = "insert into " + dbname + "." + tbname + " values('1970-01-01 07:59:59.999',3)"
|
|
||||||
console.log(sql3);
|
|
||||||
c1.execute(sql3);
|
|
||||||
|
|
||||||
let sql4 = "insert into " + dbname + "." + tbname + " values('1970-01-01 08:00:00.000',4)"
|
|
||||||
console.log(sql4);
|
|
||||||
c1.execute(sql4);
|
|
||||||
|
|
||||||
let sql5 = "insert into " + dbname + "." + tbname + " values('2021-08-14 08:07:59.484',5)"
|
|
||||||
console.log(sql5);
|
|
||||||
c1.execute(sql5);
|
|
||||||
|
|
||||||
// Select
|
|
||||||
let query1 = "select * from " + dbname + "." + tbname
|
|
||||||
console.log(query1);
|
|
||||||
c1.execute(query1);
|
|
||||||
|
|
||||||
var d = c1.fetchall();
|
|
||||||
console.log(c1.fields);
|
|
||||||
for (let i = 0; i < d.length; i++)
|
|
||||||
console.log(d[i][0].valueOf());
|
|
||||||
|
|
||||||
//initialize
|
|
||||||
let initSql1 = "drop table if exists " + tbname
|
|
||||||
console.log(initSql1);
|
|
||||||
c1.execute(initSql1);
|
|
||||||
|
|
||||||
console.log(createTbl);
|
|
||||||
c1.execute(createTbl);
|
|
||||||
c1.execute(useTbl)
|
|
||||||
|
|
||||||
//-28800001 1969-12-31 23:59:59.999
|
|
||||||
//-28800000 1970-01-01 00:00:00.000
|
|
||||||
//-1 1970-01-01 07:59:59.999
|
|
||||||
//0 1970-01-01 08:00:00.00
|
|
||||||
//1628928479484 2021-08-14 08:07:59.484
|
|
||||||
let sql11 = "insert into " + dbname + "." + tbname + " values(-28800001,11)";
|
|
||||||
console.log(sql11);
|
|
||||||
c1.execute(sql11);
|
|
||||||
|
|
||||||
let sql12 = "insert into " + dbname + "." + tbname + " values(-28800000,12)"
|
|
||||||
console.log(sql12);
|
|
||||||
c1.execute(sql12);
|
|
||||||
|
|
||||||
let sql13 = "insert into " + dbname + "." + tbname + " values(-1,13)"
|
|
||||||
console.log(sql13);
|
|
||||||
c1.execute(sql13);
|
|
||||||
|
|
||||||
let sql14 = "insert into " + dbname + "." + tbname + " values(0,14)"
|
|
||||||
console.log(sql14);
|
|
||||||
c1.execute(sql14);
|
|
||||||
|
|
||||||
let sql15 = "insert into " + dbname + "." + tbname + " values(1628928479484,15)"
|
|
||||||
console.log(sql15);
|
|
||||||
c1.execute(sql15);
|
|
||||||
|
|
||||||
// Select
|
|
||||||
console.log(query1);
|
|
||||||
c1.execute(query1);
|
|
||||||
|
|
||||||
var d = c1.fetchall();
|
|
||||||
console.log(c1.fields);
|
|
||||||
for (let i = 0; i < d.length; i++)
|
|
||||||
console.log(d[i][0].valueOf());
|
|
||||||
|
|
||||||
setTimeout(function () {
|
|
||||||
conn.close();
|
|
||||||
}, 2000);
|
|
||||||
|
|
Loading…
Reference in New Issue