@tdengine/websocket
是 TDengine 的官方 Node.js 语言连接器。Node.js 开发人员可以通过它开发存取 TDengine 数据库的应用软件。
Node.js 连接器源码托管在 GitHub。
支持 Node.js 14 及以上版本。
支持所有能运行 Node.js 的平台。
Node.js 连接器 版本 | 主要变化 | TDengine 版本 |
---|---|---|
3.1.5 | 密码支持特殊字符 | - |
3.1.4 | 修改 readme | - |
3.1.3 | 升级了 es5-ext 版本,解决低版本的漏洞 | - |
3.1.2 | 对数据协议和解析进行了优化,性能得到大幅提升 | - |
3.1.1 | 优化了数据传输性能 | 3.3.2.0 及更高版本 |
3.1.0 | 新版本发布,支持 WebSocket 连接 | 3.2.0.0 及更高版本 |
在调用连接器 api 报错后,通过 try catch 可以获取到错误的信息和错误码。
错误说明:Node.js 连接器错误码在 100 到 110 之间,之外的错误为 TDengine 其他功能模块的报错。
具体的连接器错误码请参考:
Error Code | Description | Suggested Actions |
---|---|---|
100 | invalid variables | 参数不合法,请检查相应接口规范,调整参数类型及大小。 |
101 | invalid url | url 错误,请检查 url 是否填写正确。 |
102 | received server data but did not find a callback for processing | 接收到服务端数据但没有找到上层回调 |
103 | invalid message type | 接收到的消息类型无法识别,请检查服务端是否正常。 |
104 | connection creation failed | 连接创建失败,请检查网络是否正常。 |
105 | websocket request timeout | 请求超时 |
106 | authentication fail | 认证失败,请检查用户名,密码是否正确。 |
107 | unknown sql type in tdengine | 请检查 TDengine 支持的 Data Type 类型。 |
108 | connection has been closed | 连接已经关闭,请检查 Connection 是否关闭后再次使用,或是连接是否正常。 |
109 | fetch block data parse fail | 获取到的查询数据,解析失败 |
110 | websocket connection has reached its maximum limit | WebSocket 连接达到上限 |
下表为 TDengine DataType 和 Node.js DataType 之间的映射关系
TDengine DataType | Node.js DataType |
---|---|
TIMESTAMP | bigint |
TINYINT | number |
SMALLINT | number |
INT | number |
BIGINT | bigint |
TINYINT UNSIGNED | number |
SMALLINT UNSIGNED | number |
INT UNSIGNED | number |
BIGINT UNSIGNED | bigint |
FLOAT | number |
DOUBLE | number |
BOOL | boolean |
BINARY | string |
NCHAR | string |
JSON | string |
VARBINARY | ArrayBuffer |
GEOMETRY | ArrayBuffer |
注意:JSON 类型仅在 tag 中支持。
示例程序 | 示例程序描述 |
---|---|
sql_example | 基本的使用如如建立连接,执行 SQL 等操作。 |
stmt_example | 绑定参数插入的示例。 |
line_example | 行协议写入示例。 |
tmq_example | 订阅的使用示例。 |
all_type_query | 支持全部类型示例。 |
all_type_stmt | 参数绑定支持全部类型示例。 |
@tdengine/websocket
)支持 Node.js 14 以上版本,低于 14 的版本可能存在包兼容性的问题。“Unable to establish connection” 或 “Unable to resolve FQDN”
原因:一般都是因为配置 FQDN 不正确。可以参考 如何彻底搞懂 TDengine 的 FQDN 。
Node.js 连接器(@tdengine/websocket
), 其通过 taosAdapter 提供的 WebSocket 接口连接 TDengine 实例。
[+]://[[:@]:][/][?=[&=]]
|------------|---|-----------|-----------|------|------|------------|-----------------------|
| protocol | | username | password | host | port | database | params |
protocol:使用 websocket 协议建立连接。例如ws://localhost:6041
username/password:数据库的用户名和密码。
host/port:主机地址和端口号。例如localhost:6041
database:数据库名称。
params:其他参数。例如 token。
完整 URL 示例:
ws://root:taosdata@localhost:6041
除了通过指定的 URL 获取连接,还可以使用 WSConfig 指定建立连接时的参数。
const taos = require("@tdengine/websocket");
async function createConnect() {
try {
let url = 'ws://127.0.0.1:6041'
let conf = new taos.WSConfig(url)
conf.setUser('root')
conf.setPwd('taosdata')
conf.setDb('db')
conf.setTimeOut(500)
let wsSql = await taos.sqlConnect(conf)
} catch (e) {
console.error(e);
}
}
WSConfig 中的配置如下:
static async open(wsConfig:WSConfig):Promise
wsConfig
:连接配置,详见上文 WSConfig 章节。TDWebSocketClientError
异常。destroyed()
TDWebSocketClientError
异常。async version(): Promise
TDWebSocketClientError
异常。async exec(sql: string, reqId?: number): Promise
sql
:待执行的 sql 语句。reqId
:请求 id 非必填,用于问题追踪。TaosResult {
affectRows: number, 影响的条数
timing: number, 执行时长
totalTime: number, 响应总时长
}
TDWebSocketClientError
异常。async query(sql: string, reqId?:number): Promise
sql
:待执行的查询 sql 语句。reqId
:请求 id 非必填,用于问题追踪。TDWebSocketClientError
异常。getMeta():Array | null
export interface TDengineMeta {
name: string,
type: string,
length: number,
}
async next(): Promise
TDWebSocketClientError
异常。getData(): Array
async close():Promise
TDWebSocketClientError
异常。async schemalessInsert(lines: Array, protocol: SchemalessProto, precision: Precision, ttl: number, reqId?: number): Promise
lines
:待写入的数据数组,无模式具体的数据格式可参考 Schemaless 写入
。protocol
:协议类型
SchemalessProto.InfluxDBLineProtocol
:InfluxDB 行协议(Line Protocol)。SchemalessProto.OpenTSDBTelnetLineProtocol
:OpenTSDB 文本行协议。SchemalessProto.OpenTSDBJsonFormatProtocol
:JSON 协议格式。precision
:时间精度
Precision.HOURS
:小时Precision.MINUTES
:分钟Precision.SECONDS
:秒Precision.MILLI_SECONDS
:毫秒Precision.MICRO_SECONDS
:微秒Precision.NANO_SECONDS
:纳秒ttl
:表过期时间,单位天。reqId
:用于问题追踪,可选。TaosResultError
异常。async stmtInit(reqId?:number): Promise
reqId
:请求 id 非必填,用于问题追踪。TDWebSocketClientError
异常。async prepare(sql: string): Promise
sql
:预编译的 SQL 语句。TDWebSocketClientError
异常。async setTableName(tableName: string): Promise
tableName
:表名,如果需要指定数据库,例如:db_name.table_name
即可。TDWebSocketClientError
异常。setBoolean(params :any[])
params
:布尔类型列表。TDWebSocketClientError
异常。setTinyInt(params :any[])
setUTinyInt(params :any[])
setSmallInt(params :any[])
setUSmallInt(params :any[])
setInt(params :any[])
setUInt(params :any[])
setBigint(params :any[])
setUBigint(params :any[])
setFloat(params :any[])
setDouble(params :any[])
setVarchar(params :any[])
setBinary(params :any[])
setNchar(params :any[])
setJson(params :any[])
setVarBinary(params :any[])
setGeometry(params :any[])
setTimestamp(params :any[])
async setTags(paramsArray:StmtBindParams): Promise
paramsArray
:Tags 数据。TDWebSocketClientError
异常。async bind(paramsArray:StmtBindParams): Promise
paramsArray
:绑定数据。TDWebSocketClientError
异常。async batch(): Promise
TDWebSocketClientError
异常。async exec(): Promise
TDWebSocketClientError
异常。getLastAffected()
async close(): Promise
TDWebSocketClientError
异常。static async newConsumer(wsConfig:Map):Promise
wsConfig
:创建消费者属性配置。TDWebSocketClientError
错误。async subscribe(topics: Array, reqId?:number): Promise
topics
:订阅的主题列表。reqId
:请求 id 非必填,用于问题追踪。TDWebSocketClientError
异常。async unsubscribe(reqId?:number): Promise
reqId
:请求 id 非必填,用于问题追踪。TDWebSocketClientError
异常。async poll(timeoutMs: number, reqId?:number):Promise
timeoutMs
:表示轮询的超时时间,单位毫秒。reqId
:请求 id 非必填,用于问题追踪。Map
每个主题对应的数据。TDWebSocketClientError
异常。async subscription(reqId?:number):Promise>
reqId
:请求 id 非必填,用于问题追踪。Array
主题列表。TDWebSocketClientError
异常。async commit(reqId?:number):Promise>
reqId
:请求 id 非必填,用于问题追踪。Array
每个主题的消费进度。TDWebSocketClientError
异常。async committed(partitions:Array, reqId?:number):Promise>
partitions
:一个 Array
类型的参数,表示要查询的分区集合。reqId
:请求 id 非必填,用于问题追踪。Array
,即一组分区最后提交的偏移量。TDWebSocketClientError
异常。async seek(partition:TopicPartition, reqId?:number):Promise
partition
:一个 TopicPartition
类型的参数,表示要操作的分区和要设置的偏移量。reqId
:请求 id 非必填,用于问题追踪。TDWebSocketClientError
异常。async positions(partitions:Array, reqId?:number):Promise>
partitions
:一个 TopicPartition
类型的参数,表示要查询的分区。reqId
:请求 id 非必填,用于问题追踪。Array
,即一组分区最后提交的偏移量。TDWebSocketClientError
异常。async seekToBeginning(partitions:Array):Promise
partitions
:一个 Array
类型的参数,表示要操作的分区集合。TDWebSocketClientError
异常。async seekToEnd(partitions:Array):Promise
partitions
:一个 Array
类型的参数,表示要操作的分区集合。TDWebSocketClientError
异常。async assignment(topics?:string[]):Promise>
topics
:需要获取的分区(非必填),不填表示获取全部的分区Array
,即消费者当前分配的所有分区。TDWebSocketClientError
异常。async close():Promise
TDWebSocketClientError
异常。更多内容欢迎访问 TDengine 官网