node.mdx 9.4 KB
Newer Older
B
Bo Ding 已提交
1
---
D
dingbo 已提交
2 3
sidebar_position: 6
sidebar_label: Node.js
D
dingbo 已提交
4
title: Node.js Connector
B
Bo Ding 已提交
5 6
---

D
dingbo 已提交
7
## 简介
B
Bo Ding 已提交
8 9 10 11 12 13 14 15 16 17 18 19

Node.js 连接器支持的系统有:

| **CPU 类型** | x64(64bit) |          |          | aarch64  | aarch32  |
| ------------ | ------------ | -------- | -------- | -------- | -------- |
| **OS 类型**  | Linux        | Win64    | Win32    | Linux    | Linux    |
| **支持与否** | **支持**     | **支持** | **支持** | **支持** | **支持** |

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

### 安装准备

D
dingbo 已提交
20
- 应用驱动安装请参考[安装连接器驱动步骤](/reference/connector/#安装客户端驱动)。
B
Bo Ding 已提交
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105

### 安装 Node.js 连接器

用户可以通过[npm](https://www.npmjs.com/)来进行安装,也可以通过源代码*src/connector/nodejs/* 来进行安装。具体安装步骤如下:

首先,通过[npm](https://www.npmjs.com/)安装 node.js 连接器。

```bash
npm install td2.0-connector
```

我们建议用户使用 npm 安装 node.js 连接器。如果您没有安装 npm,可以将*src/connector/nodejs/*拷贝到您的 nodejs 项目目录下。

我们使用[node-gyp](https://github.com/nodejs/node-gyp)和 TDengine 服务端进行交互。安装 node.js 连接器之前,还需要根据具体操作系统来安装下文提到的一些依赖工具。

### Linux

- `python` (建议`v2.7` , `v3.x.x` 目前还不支持)
- `node` 2.0.6 支持 v12.x 和 v10.x,2.0.5 及更早版本支持 v10.x 版本,其他版本可能存在包兼容性的问题。
- `make`
- c 语言编译器比如[GCC](https://gcc.gnu.org)

### Windows

#### 安装方法 1

使用微软的[windows-build-tools](https://github.com/felixrieseberg/windows-build-tools)在`cmd` 命令行界面执行`npm install --global --production windows-build-tools` 即可安装所有的必备工具。

#### 安装方法 2

手动安装以下工具:

- 安装 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`

如果以上步骤不能成功执行,可以参考微软的 node.js 用户手册[Microsoft's Node.js Guidelines for Windows](https://github.com/Microsoft/nodejs-guidelines/blob/master/windows-environment.md#compiling-native-addon-modules)。

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

### 示例程序

示例程序源码位于 install_directory/examples/nodejs,有:

Node-example.js node.js 示例源程序
Node-example-raw.js

### 安装验证

在安装好 TDengine 客户端后,使用 nodejsChecker.js 程序能够验证当前环境是否支持 nodejs 方式访问 Tdengine。

验证方法:

1. 新建安装验证目录,例如:`~/tdengine-test`,拷贝 github 上 nodejsChecker.js 源程序。下载地址:(https://github.com/taosdata/TDengine/tree/develop/examples/nodejs/nodejsChecker.js)。

2. 在命令行中执行以下命令:

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

3. 执行以上步骤后,在命令行会输出 nodejs 连接 Tdengine 实例,并执行简答插入和查询的结果。

### Node.js 连接器的使用

以下是 Node.js 连接器的一些基本使用方法,详细的使用方法可参考[TDengine Node.js connector](https://github.com/taosdata/TDengine/tree/develop/src/connector/nodejs)。

#### 建立连接

使用 node.js 连接器时,必须先`require td2.0-connector`,然后使用 `taos.connect` 函数建立到服务端的连接。例如如下代码:

```javascript
const taos = require("td2.0-connector");
var conn = taos.connect({
  host: "taosdemo.com",
  user: "root",
  password: "taosdata",
  config: "/etc/taos",
  port: 6030,
});
var cursor = conn.cursor(); // Initializing a new cursor
```

D
dingbo 已提交
106
建立了一个到 hostname 为 taosdemo.com,端口为 6030(Tdengine 的默认端口号)的连接。连接指定了用户名(root)和密码(taosdata)。taos.connect 函数必须提供的参数是`host`,其它参数在没有提供的情况下会使用如下的默认值。taos.connect 返回了`TDengineConnection` 对象,使用 `cursor()` 方法获取`TDengineCursor`对象来执行 sql 语句。
B
Bo Ding 已提交
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198

#### 执行 SQL 和插入数据

对于 DDL 语句(例如 create database、create table、use 等),可以使用 cursor 的 execute 方法。代码如下:

```js
cursor.execute("create database if not exists test;");
```

以上代码创建了一个名称为 test 的数据库。对于 DDL 语句,一般没有返回值,cursor 的 execute 返回值为 0。

对于 Insert 语句,代码如下:

```js
var affectRows = cursor.execute(
  "insert into test.weather values(now, 22.3, 34);"
);
```

execute 方法的返回值为该语句影响的行数,上面的 sql 向 test 库的 weather 表中,插入了一条数据,则返回值 affectRows 为 1。

TDengine 目前还不支持 delete 语句。但从 2.0.8.0 版本开始,可以通过 `CREATE DATABASE` 时指定的 UPDATE 参数来启用对数据行的 update。

#### 查询

可通过 `cursor.query` 函数来查询数据库。

```javascript
var query = cursor.query("show databases;");
```

查询的结果可以通过 `query.execute()` 函数获取并打印出来。

```javascript
var promise = query.execute();
promise.then(function (result) {
  result.pretty();
});
```

格式化查询语句还可以使用`query`的`bind`方法。如下面的示例:`query`会自动将提供的数值填入查询语句的`?`里。

```javascript
var query = cursor
  .query("select * from meterinfo.meters where ts <= ? and areaid = ?;")
  .bind(new Date(), 5);
query.execute().then(function (result) {
  result.pretty();
});
```

如果在`query`语句里提供第二个参数并设为`true`也可以立即获取查询结果。如下:

```javascript
var promise = cursor.query(
  "select * from meterinfo.meters where v1 = 30;",
  true
);
promise.then(function (result) {
  result.pretty();
});
```

#### 关闭连接

在完成插入、查询等操作后,要关闭连接。代码如下:

```js
conn.close();
```

#### 异步函数

异步查询数据库的操作和上面类似,只需要在`cursor.execute`, `TaosQuery.execute`等函数后面加上`_a`。

```javascript
var promise1 = cursor
  .query("select count(*), avg(v1), avg(v2) from meter1;")
  .execute_a();
var promise2 = cursor
  .query("select count(*), avg(v1), avg(v2) from meter2;")
  .execute_a();
promise1.then(function (result) {
  result.pretty();
});
promise2.then(function (result) {
  result.pretty();
});
```

### 示例

D
dingbo 已提交
199
[node-example.js](https://github.com/taosdata/TDengine/blob/master/examples/nodejs/node-example.js)提供了一个使用 NodeJS 连接器建表,插入天气数据并查询插入的数据的代码示例。
B
Bo Ding 已提交
200 201

[node-example-raw.js](https://github.com/taosdata/tests/tree/master/examples/nodejs/node-example-raw.js)同样是一个使用 NodeJS 连接器建表,插入天气数据并查询插入的数据的代码示例,但和上面不同的是,该示例只使用`cursor`。
D
dingbo 已提交
202 203

[所有示例代码](https://github.com/taosdata/TDengine/tree/develop/src/connector/nodejs/examples)
204

D
dingbo 已提交
205
## 使用 REST 连接器
206

D
dingbo 已提交
207
TDengine 还提供 TypeScript 的 REST 连接器。
208 209
注意:`td2.0-rest-connector` 依赖 [node-fetch v2](https://github.com/node-fetch/node-fetch/tree/2.x) 。

D
dingbo 已提交
210
### REST 连接器的使用
211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262

* 安装连接器

```bash
npm i td2.0-rest-connector
```

* 引用连接器

``` TypeScript
import { options, connect } from 'td2.0-rest-connector'
options.path='/rest/sqlt';
// 设置HOST
options.host='localhost';
// 设置其他的属性例如:用户名/密码

let conn = connect(options);
let cursor = conn.cursor();
(async()=>{
    let result = await cursor.query('show databases');
    // 打印查询结果
    result.toString();
})()
```

### RESTful 常用方法

``` javascript
    // restult 是 Result 对象,即执行查询命令后返回的对象。
    // 获取执行结果对象
    result.getResult()
    // 获得执行状态,返回 'succ'|'error'.
    result.getStatus()
    // 获得返回结果的头,返回 Array<any>|undefined (当执行 SQL 语句失败时返回 undefined)。
    result.getHead()
    // 获得返回结果的元数据, 返回 Meta[]|undefined(当执行 SQL 语句失败时返回 undefined)。
    result.getMeta()
    // 获得返回结果的数据,返回 Array<Array<any>>|undefined(当执行 SQL 语句失败时返回 undefined)。
    result.getData()
    // 获得执行命令影响的行数,返回 number|undefined(当执行 SQL 语句失败时返回 undefined)。
    result.getAffectRows()
    // 获得执行的命令,返回 string(需要在 `query(sql,false)` 中设置 'pure=false',默认为 true)。
    result.getCommand()
    // 获得执行的命令的错误码,返回 number|undefined(当执行 SQL 语句失败时返回 undefined)。
    result.getErrCode()
    // 获得执行的命令的错误信息,返回 string|undefined(当执行 SQL 语句失败时返回 undefined)。
    result.getErrStr()
```

### 示例程序

更多示例参考 [TypeScript REST connector](https://github.com/taosdata/TDengine/tree/develop/src/connector/TypeScript-REST)。