文档文档

使用 InfluxDB JavaScript 客户端库查询数据

在 Node.js 环境中使用 InfluxDB JavaScript 客户端库 查询 InfluxDB。

以下示例将 Flux 查询发送到 InfluxDB 存储桶,并从可观察的表格中输出行。

开始之前

查询 InfluxDB

  1. 切换到您的新项目目录,并为您的查询模块创建一个文件。

    cd influx-node-app && touch query.js
    
  2. 实例化一个 InfluxDB 客户端。提供您的 InfluxDB URL 和 API 令牌。使用客户端的 getQueryApi() 方法。提供您的 InfluxDB 组织 ID 以创建一个配置的查询客户端

    import { InfluxDB, Point } from '@influxdata/influxdb-client'
    
    const queryApi = new InfluxDB({YOUR_URL, YOUR_API_TOKEN}).getQueryApi(YOUR_ORG)
    

    替换以下内容

    • YOUR_URL:InfluxDB URL
    • YOUR_API_TOKEN:InfluxDB API 令牌
    • YOUR_ORG:InfluxDB 组织 ID
  3. 为您的 InfluxDB 存储桶创建 Flux 查询。将查询存储为字符串变量。

    为防止 SQL 注入攻击,请避免将不安全的用户输入与查询连接。

    const fluxQuery =
      'from(bucket: "YOUR_BUCKET")
        |> range(start: 0)
        |> filter(fn: (r) => r._measurement == "temperature")'
    

    YOUR_BUCKET 替换为您的 InfluxDB 存储桶的名称。

  4. 使用查询客户端的 queryRows() 方法查询 InfluxDB。queryRows() 接受一个 Flux 查询和一个 RxJS Observer 对象。客户端返回 表格 元数据和行,作为 RxJS ObservablequeryRows() 将您的观察者订阅到 observable。最后,观察者将响应中的行记录到终端。

    const observer = {
      next(row, tableMeta) {
        const o = tableMeta.toObject(row)
        console.log(
          `${o._time} ${o._measurement} in '${o.location}' (${o.sensor_id}): ${o._field}=${o._value}`
        )
      }
    }
    
    queryApi.queryRows(fluxQuery, observer)
    

完整示例

'use strict'
/** @module query 
 * Queries a data point in InfluxDB using the Javascript client library with Node.js.
**/

import { InfluxDB, Point } from '@influxdata/influxdb-client'

/** Environment variables **/
const url = process.env.INFLUX_URL || ''
const token = process.env.INFLUX_TOKEN
const org = process.env.INFLUX_ORG || ''

/**
 * Instantiate the InfluxDB client
 * with a configuration object.
 *
 * Get a query client configured for your org.
 **/
const queryApi = new InfluxDB({url, token}).getQueryApi(org)

/** To avoid SQL injection, use a string literal for the query. */
const fluxQuery = 'from(bucket:"air_sensor") |> range(start: 0) |> filter(fn: (r) => r._measurement == "temperature")'

const myQuery = async () => {
  for await (const {values, tableMeta} of queryApi.iterateRows(fluxQuery)) {
    const o = tableMeta.toObject(values)
    console.log(
      `${o._time} ${o._measurement} in '${o.location}' (${o.sensor_id}): ${o._field}=${o._value}`
    )
  }
}

/** Execute a query and receive line table metadata and rows. */
myQuery()

要从文件运行示例,请设置您的 InfluxDB 环境变量,并使用 node 执行 JavaScript 文件。

export INFLUX_URL=http://localhost:8086 && \
export INFLUX_TOKEN=YOUR_API_TOKEN && \
export INFLUX_ORG=YOUR_ORG && \
node query.js

有关更多示例和信息,请参阅 GitHub 上的 JavaScript 客户端


此页是否对您有帮助?

感谢您的反馈!


Flux 的未来

Flux 将进入维护模式。您可以继续像目前一样使用它,而无需对您的代码进行任何更改。

阅读更多

现已全面上市

InfluxDB 3 Core 和 Enterprise

快速启动。更快扩展。

获取更新

InfluxDB 3 Core 是一个开源、高速、最近数据引擎,可实时收集和处理数据,并将其持久化到本地磁盘或对象存储。InfluxDB 3 Enterprise 构建在 Core 的基础上,增加了高可用性、读取副本、增强的安全性以及数据压缩,以实现更快的查询和优化的存储。InfluxDB 3 Enterprise 的免费层可供非商业家庭或业余爱好者使用。

有关更多信息,请查看