node.mdx 10.5 KB
Newer Older
B
Bo Ding 已提交
1
---
sangshuduo's avatar
sangshuduo 已提交
2
toc_max_heading_level: 4
D
dingbo 已提交
3 4
sidebar_position: 6
sidebar_label: Node.js
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
5
title: TDengine Node.js Connector
B
Bo Ding 已提交
6 7
---

G
gccgdb1234 已提交
8 9
import Tabs from "@theme/Tabs";
import TabItem from "@theme/TabItem";
sangshuduo's avatar
sangshuduo 已提交
10

G
gccgdb1234 已提交
11 12 13 14 15 16 17
import Preparition from "./_preparition.mdx";
import NodeInsert from "../../04-develop/03-insert-data/_js_sql.mdx";
import NodeInfluxLine from "../../04-develop/03-insert-data/_js_line.mdx";
import NodeOpenTSDBTelnet from "../../04-develop/03-insert-data/_js_opts_telnet.mdx";
import NodeOpenTSDBJson from "../../04-develop/03-insert-data/_js_opts_json.mdx";
import NodeQuery from "../../04-develop/04-query-data/_js.mdx";
import NodeAsyncQuery from "../../04-develop/04-query-data/_js_async.mdx";
sangshuduo's avatar
sangshuduo 已提交
18

sangshuduo's avatar
sangshuduo 已提交
19
`td2.0-connector` 是 TDengine 的官方 Node.js 语言连接器。Node.js 开发人员可以通过它开发可以存取 TDengine 集群数据的应用软件。
20

陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
21
`td2.0-connector` 支持两种形式的连接器。一种是**原生连接器**,它通过 TDengine 客户端驱动程序(taosc)连接 TDengine 运行实例,支持数据写入、查询、订阅、schemaless 接口和参数绑定接口等功能。另外一种是 **REST 连接器**,它通过 taosAdapter 提供的 REST 接口连接 TDengine 的运行实例。REST 连接器可以在任何平台运行,但性能略为下降,接口实现的功能特性集合和原生接口有少量不同。
sangshuduo's avatar
sangshuduo 已提交
22 23

`td2.0-connector` 的源码托管在 [GitHub](https://github.com/taosdata/taos-connector-node)。
sangshuduo's avatar
sangshuduo 已提交
24

25
## 支持的平台
B
Bo Ding 已提交
26

陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
27 28
原生连接器支持的平台和 TDengine 客户端驱动支持的平台一致。
REST 连接器支持所有能运行 Node.js 的平台。
B
Bo Ding 已提交
29

30
## 版本支持
B
Bo Ding 已提交
31

sangshuduo's avatar
sangshuduo 已提交
32
请参考[版本支持列表](/reference/connector#版本支持)
B
Bo Ding 已提交
33

sangshuduo's avatar
sangshuduo 已提交
34
## 支持的功能特性
B
Bo Ding 已提交
35

陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
36
### 原生连接器
B
Bo Ding 已提交
37

38
1. 连接管理
sangshuduo's avatar
sangshuduo 已提交
39 40
2. 普通查询
3. 连续查询
41
4. 参数绑定
sangshuduo's avatar
sangshuduo 已提交
42 43
5. 订阅功能
6. Schemaless
B
Bo Ding 已提交
44

陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
45
### REST 连接器
46 47

1. 连接管理
sangshuduo's avatar
sangshuduo 已提交
48 49
2. 普通查询
3. 连续查询
50 51

## 安装步骤
B
Bo Ding 已提交
52

sangshuduo's avatar
sangshuduo 已提交
53
### 安装前准备
B
Bo Ding 已提交
54

G
gccgdb1234 已提交
55
- 安装 Node.js 开发环境
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
56
- 如果使用 REST 连接器,跳过此步。但如果使用原生连接器,请安装 TDengine 客户端驱动,具体步骤请参考[安装客户端驱动](/reference/connector#安装客户端驱动)。我们使用 [node-gyp](https://github.com/nodejs/node-gyp) 和 TDengine 实例进行交互,还需要根据具体操作系统来安装下文提到的一些依赖工具。
B
Bo Ding 已提交
57

sangshuduo's avatar
sangshuduo 已提交
58 59
<Tabs defaultValue="Linux">
<TabItem value="Linux" label="Linux 系统安装依赖工具">
B
Bo Ding 已提交
60 61

- `python` (建议`v2.7` , `v3.x.x` 目前还不支持)
sangshuduo's avatar
sangshuduo 已提交
62
- `td2.0-connector` 2.0.6 支持 Node.js LTS v10.9.0 或更高版本, Node.js LTS v12.8.0 或更高版本;2.0.5 及更早版本支持 Node.js LTS v10.x 版本。其他版本可能存在包兼容性的问题
B
Bo Ding 已提交
63
- `make`
sangshuduo's avatar
sangshuduo 已提交
64
- C 语言编译器,[GCC](https://gcc.gnu.org) v4.8.5 或更高版本
B
Bo Ding 已提交
65

sangshuduo's avatar
sangshuduo 已提交
66
</TabItem>
sangshuduo's avatar
sangshuduo 已提交
67
<TabItem value="Windows" label="Windows 系统安装依赖工具">
B
Bo Ding 已提交
68

sangshuduo's avatar
sangshuduo 已提交
69
- 安装方法 1
B
Bo Ding 已提交
70

sangshuduo's avatar
sangshuduo 已提交
71
使用微软的[ windows-build-tools ](https://github.com/felixrieseberg/windows-build-tools)在`cmd` 命令行界面执行`npm install --global --production windows-build-tools` 即可安装所有的必备工具。
B
Bo Ding 已提交
72

sangshuduo's avatar
sangshuduo 已提交
73
- 安装方法 2
B
Bo Ding 已提交
74 75 76 77 78 79 80

手动安装以下工具:

- 安装 Visual Studio 相关:[Visual Studio Build 工具](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools) 或者 [Visual Studio 2017 Community](https://visualstudio.microsoft.com/pl/thank-you-downloading-visual-studio/?sku=Community)
- 安装 [Python](https://www.python.org/downloads/) 2.7(`v3.x.x` 暂不支持) 并执行 `npm config set python python2.7`
- 进入`cmd`命令行界面,`npm config set msvs_version 2017`

sangshuduo's avatar
sangshuduo 已提交
81
参考微软的 Node.js 用户手册[ Microsoft's Node.js Guidelines for Windows](https://github.com/Microsoft/nodejs-guidelines/blob/master/windows-environment.md#compiling-native-addon-modules)。
B
Bo Ding 已提交
82 83

如果在 Windows 10 ARM 上使用 ARM64 Node.js,还需添加 "Visual C++ compilers and libraries for ARM64" 和 "Visual C++ ATL for ARM64"。
G
gccgdb1234 已提交
84

sangshuduo's avatar
sangshuduo 已提交
85 86
</TabItem>
</Tabs>
B
Bo Ding 已提交
87

88
### 使用 npm 安装
B
Bo Ding 已提交
89

sangshuduo's avatar
sangshuduo 已提交
90
<Tabs defaultValue="install_native">
sangshuduo's avatar
sangshuduo 已提交
91
<TabItem value="install_native" label="安装原生连接器">
B
Bo Ding 已提交
92

G
gccgdb1234 已提交
93
```bash
94 95 96
npm install td2.0-connector
```

sangshuduo's avatar
sangshuduo 已提交
97
</TabItem>
sangshuduo's avatar
sangshuduo 已提交
98
<TabItem value="install_rest" label="安装 REST 连接器">
99 100 101 102

```bash
npm i td2.0-rest-connector
```
G
gccgdb1234 已提交
103

sangshuduo's avatar
sangshuduo 已提交
104 105
</TabItem>
</Tabs>
B
Bo Ding 已提交
106 107 108

### 安装验证

109
在安装好 TDengine 客户端后,使用 nodejsChecker.js 程序能够验证当前环境是否支持 Node.js 方式访问 TDengine。
B
Bo Ding 已提交
110 111 112

验证方法:

sangshuduo's avatar
sangshuduo 已提交
113
- 新建安装验证目录,例如:`~/tdengine-test`,下载 GitHub 上 [nodejsChecker.js 源代码](https://github.com/taosdata/TDengine/tree/develop/examples/nodejs/nodejsChecker.js)到本地。
B
Bo Ding 已提交
114

115
- 在命令行中执行以下命令。
B
Bo Ding 已提交
116 117 118 119 120 121 122

```bash
npm init -y
npm install td2.0-connector
node nodejsChecker.js host=localhost
```

sangshuduo's avatar
sangshuduo 已提交
123
- 执行以上步骤后,在命令行会输出 nodejsChecker.js 连接 TDengine 实例,并执行简单插入和查询的结果。
B
Bo Ding 已提交
124

125
## 建立连接
B
Bo Ding 已提交
126

陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
127 128
请选择使用一种连接器。

sangshuduo's avatar
sangshuduo 已提交
129
<Tabs defaultValue="native">
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
130
<TabItem value="native" label="原生连接器">
B
Bo Ding 已提交
131

132
安装并引用 `td2.0-connector` 包。
B
Bo Ding 已提交
133 134

```javascript
135
//A cursor also needs to be initialized in order to interact with TDengine from Node.js.
G
gccgdb1234 已提交
136 137 138 139 140 141 142 143
const taos = require("td2.0-connector");
var conn = taos.connect({
  host: "127.0.0.1",
  user: "root",
  password: "taosdata",
  config: "/etc/taos",
  port: 0,
});
B
Bo Ding 已提交
144 145
var cursor = conn.cursor(); // Initializing a new cursor

146 147
//Close a connection
conn.close();
B
Bo Ding 已提交
148 149
```

sangshuduo's avatar
sangshuduo 已提交
150
</TabItem>
陶建辉(Jeff)'s avatar
陶建辉(Jeff) 已提交
151
<TabItem value="rest" label="REST 连接器">
B
Bo Ding 已提交
152

153
安装并引用 `td2.0-rest-connector` 包。
B
Bo Ding 已提交
154

G
gccgdb1234 已提交
155
```javascript
156
//A cursor also needs to be initialized in order to interact with TDengine from Node.js.
G
gccgdb1234 已提交
157 158
import { options, connect } from "td2.0-rest-connector";
options.path = "/rest/sqlt";
159
// set host
G
gccgdb1234 已提交
160
options.host = "localhost";
161
// set other options like user/passwd
B
Bo Ding 已提交
162

163 164
let conn = connect(options);
let cursor = conn.cursor();
B
Bo Ding 已提交
165
```
G
gccgdb1234 已提交
166

sangshuduo's avatar
sangshuduo 已提交
167 168
</TabItem>
</Tabs>
B
Bo Ding 已提交
169

170
## 使用示例
sangshuduo's avatar
sangshuduo 已提交
171

sangshuduo's avatar
sangshuduo 已提交
172 173
### 写入数据

sangshuduo's avatar
sangshuduo 已提交
174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
#### SQL 写入

<NodeInsert />

#### InfluxDB 行协议写入

<NodeInfluxLine />

#### OpenTSDB Telnet 行协议写入

<NodeOpenTSDBTelnet />

#### OpenTSDB JSON 行协议写入

<NodeOpenTSDBJson />

### 查询数据

sangshuduo's avatar
sangshuduo 已提交
192 193
#### 同步查询

sangshuduo's avatar
sangshuduo 已提交
194 195
<NodeQuery />

sangshuduo's avatar
sangshuduo 已提交
196
#### 异步查询
sangshuduo's avatar
sangshuduo 已提交
197 198 199

<NodeAsyncQuery />

200 201
## 更多示例程序

202 203
| 示例程序                                                                                                                                   | 示例程序描述                           |
| ------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------- |
204 205 206 207 208 209 210 211 212 213 214
| [connection](https://github.com/taosdata/taos-connector-node/tree/develop/nodejs/examples/cursorClose.js)                                  | 建立连接的示例。                       |
| [stmtBindBatch](https://github.com/taosdata/taos-connector-node/tree/develop/nodejs/examples/stmtBindParamBatchSample.js)                  | 绑定多行参数插入的示例。               |
| [stmtBind](https://github.com/taosdata/taos-connector-node/tree/develop/nodejs/examples/stmtBindParamSample.js)                            | 一行一行绑定参数插入的示例。           |
| [stmtBindSingleParamBatch](https://github.com/taosdata/taos-connector-node/tree/develop/nodejs/examples/stmtBindSingleParamBatchSample.js) | 按列绑定参数插入的示例。               |
| [stmtUseResult](https://github.com/taosdata/taos-connector-node/tree/develop/nodejs/examples/stmtUseResultSample.js)                       | 绑定参数查询的示例。                   |
| [json tag](https://github.com/taosdata/taos-connector-node/tree/develop/nodejs/examples/testJsonTag.js)                                    | Json tag 的使用示例。                  |
| [Nanosecond](https://github.com/taosdata/taos-connector-node/tree/develop/nodejs/examples/testNanoseconds.js)                              | 时间戳为纳秒精度的使用的示例。         |
| [Microsecond](https://github.com/taosdata/taos-connector-node/tree/develop/nodejs/examples/testMicroseconds.js)                            | 时间戳为微秒精度的使用的示例。         |
| [schemless insert](https://github.com/taosdata/taos-connector-node/tree/develop/nodejs/examples/testSchemalessInsert.js)                   | schemless 插入的示例。                 |
| [subscribe](https://github.com/taosdata/taos-connector-node/tree/develop/nodejs/examples/testSubscribe.js)                                 | 订阅的使用示例。                       |
| [asyncQuery](https://github.com/taosdata/taos-connector-node/tree/develop/nodejs/examples/tset.js)                                         | 异步查询的使用示例。                   |
215
| [REST](https://github.com/taosdata/taos-connector-node/blob/develop/typescript-rest/example/example.ts)                                    | 使用 REST 连接的 TypeScript 使用示例。 |
B
Bo Ding 已提交
216

217
## 使用限制
B
Bo Ding 已提交
218

219
Node.js 连接器 >= v2.0.6 目前支持 node 的版本为:支持 >=v12.8.0 <= v12.9.1 || >=v10.20.0 <= v10.9.0 ;2.0.5 及更早版本支持 v10.x 版本,其他版本可能存在包兼容性的问题。
D
dingbo 已提交
220

sangshuduo's avatar
sangshuduo 已提交
221
## 其他说明
222

223
Node.js 连接器的使用参见[视频教程](https://www.taosdata.com/blog/2020/11/11/1957.html)。
224

sangshuduo's avatar
sangshuduo 已提交
225
## 常见问题
226

sangshuduo's avatar
sangshuduo 已提交
227
1. 使用 REST 连接需要启动 taosadapter。
228

G
gccgdb1234 已提交
229
   ```bash
230 231
   sudo systemctl start taosadapter
   ```
232

sangshuduo's avatar
sangshuduo 已提交
233
2. 连接器 >v2.0.6 目前兼容的 Node.js 为:>=v10.20.0 <= v10.9.0 || >=v12.8.0 <= v12.9.1
234

235
3. "Unable to establish connection","Unable to resolve FQDN" 等问题一般都是因为配置 FQDN 不正确。 可以参考[如何彻底搞懂 TDengine 的 FQDN](https://www.taosdata.com/blog/2021/07/29/2741.html) 。
236

sangshuduo's avatar
sangshuduo 已提交
237 238 239 240
## 重要更新记录

### 原生接口连接器

241 242 243 244
| td2.0-connector 版本 | 说明                                                             |
| -------------------- | ---------------------------------------------------------------- |
| 2.0.12               | 修复 cursor.close() 报错的 bug。                                 |
| 2.0.11               | 支持绑定参数、json tag、schemaless 接口等功能。                  |
245
| 2.0.10               | 支持连接管理,普通查询、连续查询、获取系统信息、订阅功能等功能。 |
sangshuduo's avatar
sangshuduo 已提交
246 247 248

### REST 接口连接器

249 250
| td2.0-rest-connector 版本 | 说明                                                             |
| ------------------------- | ---------------------------------------------------------------- |
251
| 1.0.3                     | 支持连接管理、普通查询、获取系统信息、错误信息、连续查询等功能。 |
sangshuduo's avatar
sangshuduo 已提交
252

253
## API 参考
254

255
[API 参考](https://docs.taosdata.com/api/td2.0-connector/)