IBM - Создание VPC с использованием API с Node.js - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть приложение Node.js, которое в настоящее время позволяет пользователю предоставлять Digital Ocean Droplet. Однако сейчас я пытаюсь перейти на IBM Cloud и вместо этого хочу подготовить виртуальный сервер.

У меня проблема в том, что у меня нет опыта работы с API. Digital Ocean имеет свой собственный пакет NPM, выступающий в качестве оболочки для бита API Digital Ocean. Я не могу найти эквивалент для IBM Cloud. Я просматривал документацию VPC API , прошел весь процесс создания виртуального сервера с использованием терминала и успешно подготовил виртуальный сервер.

Теперь,Я пытаюсь заставить эти запросы cURL работать в Node.js. Я начинаю с простого API GET images, чтобы попытаться напечатать доступные изображения. Команда выглядит следующим образом:

curl -X GET "https://eu-gb.iaas.cloud.ibm.com/v1/images?version=2019-10-08&generation=1" \
 -H "Authorization: *IAM TOKEN HERE*"

Я прочитал документацию HTTP-узла , и до сих пор я преобразовал эту команду, чтобы она выглядела следующим образом:

const http = require('http')

const options = {
  hostname: 'https://eu-gb.iaas.cloud.ibm.com',
  port: 80,
  path: '/v1/images?version=2019-10-08&generation=1',
  method: 'GET',
  headers: {
    'Authorization': '*IAM TOKEN HERE*'
  }
};

const req = http.request(options, (res) => {
  console.log(`STATUS: ${res.statusCode}`);
  console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
  res.on('end', () => {
    console.log('No more data in response.');
  });
});

req.on('error', (e) => {
  console.error(`problem with request: ${e.message}`);
});

req.end();

Однако, когда я запускаю файл JS, я получаю следующую ошибку:

problem with request: getaddrinfo ENOTFOUND https://eu-gb.iaas.cloud.ibm.com https://eu-gb.iaas.cloud.ibm.com:80

Может кто-нибудь объяснить мне ошибку, где я иду не так, и как я могу исправить эту проблему?

Заранее большое спасибо,

G

1 Ответ

1 голос
/ 06 ноября 2019

попробуйте, как показано ниже:

const https = require('https');
const options = {
    hostname: 'eu-gb.iaas.cloud.ibm.com',
    port:  443,
    path: '/v1/images?version=2019-10-08&generation=1',
    method: 'GET',
    headers: {
        'Authorization': 'Bearer <IAM TOKEN HERE>'
    }
};
const req = https.request(options, (res) => {
    console.log('statusCode:', res.statusCode);
    console.log('headers:', res.headers);

    res.on('data', (d) => {
        process.stdout.write(d);
    });
});

req.on('error', (e) => {
    console.error(e);
});
req.end();

Протокол http:// не должен быть включен в поле хоста, также рекомендуется использовать https.

...