首页 > 解决方案 > 使用 javascript 获取 arangodb 的状态 url

问题描述

我需要获取“ http://localhost:8529/_admin/cluster/health ” url,它可以检查 arangodb 集群的状态为 javascript。

它由js文件组成,如下所示。

// 20200611141601
// http://203.255.92.193:8529/_admin/cluster/health

{
  "Health": {
    "PRMR-3f6a6958-cef1-4326-a7c6-fb20cd921726": {
      "Timestamp": "2020-06-09T04:32:09Z",
      "SyncStatus": "SERVING",
      "Status": "GOOD",
      "Host": "39f18558358b46eca3504bd0b4ebed26",
      "Version": "3.6.3-1",
      "SyncTime": "2020-06-09T04:32:08Z",
      "Endpoint": "tcp://203.255.92.194:8530",
      "LastAckedTime": "2020-06-09T04:32:08Z",
      "Engine": "rocksdb",
      "ShortName": "DBServer0001",
      "Role": "DBServer",
      "CanBeDeleted": false
    },
    "CRDN-4063e580-4ae0-4b89-ba5a-5b4c5616cb20": {
      "Timestamp": "2020-06-09T12:03:09Z",
      "SyncStatus": "SERVING",
      "Status": "GOOD",
      "Host": "c424ee3654814288904d1f31c257e038",
      "ShortName": "Coordinator0019",
      "Engine": "rocksdb",
      "Version": "3.6.3-1",
      "SyncTime": "2020-06-09T12:03:08Z",
      "LastAckedTime": "2020-06-09T12:03:09Z",
      "Endpoint": "tcp://203.255.92.193:8529",
      "Role": "Coordinator",
      "CanBeDeleted": false

我已经尝试过了,但它是未定义的。

const url = require('url');
const address = 'http://localhost:8529/_admin/cluster/health';
const parsedData= url.parse(address, true);

console.log(parsedData.Health); 
console.log(parsedData.Status); 
console.log(parsedData.search); 

const queryData = parsedData.query; 
console.log(queryData.Health);

我不知道该怎么做。是否有使用 javascript获取“ http://localhost:8529/_admin/cluster/health ”的库函数

标签: javascriptnode.jsarangodb

解决方案


url.parse()仅解析您传递给它的 URL 字符串:

console.log(parsedData);

/*
Url {
  protocol: 'http:',
  slashes: true,
  auth: null,
  host: 'localhost:8529',
  port: '8529',
  hostname: 'localhost',
  hash: null,
  search: null,
  query: [Object: null prototype] {},
  pathname: '/_admin/cluster/health',
  path: '/_admin/cluster/health',
  href: 'http://localhost:8529/_admin/cluster/health'
}
*/

您需要向服务器发出实际请求,例如:

const http = require("http");

http.get("http://localhost:8529/_admin/cluster/health", res => {
    let data = "";

    res.on("data", chunk => {
        data += chunk;
    });

    res.on("end", () => {
        try {
            const parsedData = JSON.parse(data);
            if (parsedData.error) {
                throw new Error("Server replied with error code " + parsedData.code);
            }
            console.log("Status: Node ID");
            for (node in parsedData.Health) {
                console.log(parsedData.Health[node].Status + ": " + node);
            }
        } catch(err) {
            console.log("Error: " + err.message);
        }
    });

    res.on("error", err => {
        console.log("Error: " + err.message);
    });
});

该示例假定 Coordinator 节点在端口 8529 上本地运行,并且对集群禁用了身份验证。


推荐阅读