82 lines
2.7 KiB
Markdown
82 lines
2.7 KiB
Markdown
|
|
Use the [InfluxDB JavaScript client library](https://github.com/influxdata/influxdb-client-js) in a Node.js environment to query InfluxDB.
|
|
|
|
The following example sends a Flux query to an InfluxDB bucket and outputs rows from an observable table.
|
|
|
|
## Before you begin
|
|
|
|
- [Install the client library and other dependencies](/influxdb/version/api-guide/client-libraries/nodejs/install/).
|
|
|
|
## Query InfluxDB
|
|
|
|
1. Change to your new project directory and create a file for your query module.
|
|
|
|
```sh
|
|
cd influx-node-app && touch query.js
|
|
```
|
|
|
|
2. Instantiate an `InfluxDB` client. Provide your InfluxDB URL and API token.
|
|
Use the `getQueryApi()` method of the client.
|
|
Provide your InfluxDB organization ID to create a configured **query client**.
|
|
|
|
```js
|
|
import { InfluxDB, Point } from '@influxdata/influxdb-client'
|
|
|
|
const queryApi = new InfluxDB({YOUR_URL, YOUR_API_TOKEN}).getQueryApi(YOUR_ORG)
|
|
```
|
|
|
|
Replace the following:
|
|
- *`YOUR_URL`*: InfluxDB URL
|
|
- *`YOUR_API_TOKEN`*: InfluxDB API token
|
|
- *`YOUR_ORG`*: InfluxDB organization ID
|
|
|
|
3. Create a Flux query for your InfluxDB bucket. Store the query as a string variable.
|
|
{{% warn %}}
|
|
To prevent SQL injection attacks, avoid concatenating unsafe user input with queries.
|
|
{{% /warn %}}
|
|
|
|
```js
|
|
const fluxQuery =
|
|
'from(bucket: "YOUR_BUCKET")
|
|
|> range(start: 0)
|
|
|> filter(fn: (r) => r._measurement == "temperature")'
|
|
```
|
|
Replace *`YOUR_BUCKET`* with the name of your InfluxDB bucket.
|
|
|
|
4. Use the `queryRows()` method of the query client to query InfluxDB.
|
|
`queryRows()` takes a Flux query and an [RxJS **Observer**](http://reactivex.io/rxjs/manual/overview.html#observer) object.
|
|
The client returns [table](/influxdb/version/reference/syntax/annotated-csv/#tables) metadata and rows as an [RxJS **Observable**](http://reactivex.io/rxjs/manual/overview.html#observable).
|
|
`queryRows()` subscribes your observer to the observable.
|
|
Finally, the observer logs the rows from the response to the terminal.
|
|
|
|
```js
|
|
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)
|
|
|
|
```
|
|
|
|
### Complete example
|
|
|
|
```js
|
|
{{% get-shared-text "api/v2.0/query/query.mjs" %}}
|
|
```
|
|
|
|
To run the example from a file, set your InfluxDB environment variables and use `node` to execute the JavaScript file.
|
|
|
|
```sh
|
|
export INFLUX_URL=http://localhost:8086 && \
|
|
export INFLUX_TOKEN=YOUR_API_TOKEN && \
|
|
export INFLUX_ORG=YOUR_ORG && \
|
|
node query.js
|
|
```
|
|
|
|
{{% api/v2dot0/nodejs/learn-more %}}
|