All Products
Search
Document Center

HTTPDNS:Integrasi SDK Node.js

Last Updated:Nov 26, 2025

Topik ini menjelaskan cara mengintegrasikan dan menggunakan HTTPDNS dalam aplikasi Node.js.

Node.js adalah lingkungan runtime JavaScript yang dibangun di atas mesin Chrome V8, banyak digunakan untuk pengembangan sisi server, pembuatan API, dan penerapan arsitektur mikroservis.

Alibaba Cloud menyediakan kit pengembangan perangkat lunak (SDK) @alicloud-emas/httpdns untuk lingkungan Node.js. Anda dapat mengintegrasikan SDK ke dalam aplikasi Node.js dan memanfaatkan fitur-fitur HTTPDNS dengan mengikuti praktik terbaik untuk Node.js.

Bagian berikut menjelaskan cara menggunakan SDK beserta praktik terbaiknya.

Quick start

1.1 Aktifkan layanan

Lihat Quick Start untuk mengaktifkan HTTPDNS.

1.2 Dapatkan konfigurasi

Lihat Development Configurations untuk mendapatkan AccountId, SecretKey, dan informasi lainnya dari bagian konfigurasi pengembangan di Konsol EMAS. Informasi ini diperlukan untuk inisialisasi SDK.

Instalasi

Instal SDK menggunakan npm:

npm install @alicloud-emas/httpdns

Contoh integrasi:

Untuk kode contoh dan dokumentasi, lihat repositori GitHub.

Konfigurasi dan penggunaan

3.1 Inisialisasi konfigurasi

Inisialisasi SDK setelah aplikasi dimulai agar dapat menggunakan fitur-fitur HTTPDNS. Selama inisialisasi, Anda harus mengonfigurasi AccountId, SecretKey, dan sakelar fitur. Kode berikut memberikan contohnya:

import { createClient } from '@alicloud-emas/httpdns';

const client = createClient({
  accountId: 'your-account-id',
  secretKey: 'your-secret-key',
  enableExpiredIP: true,
  enableHTTPS: true,
});
Penting

Mengatur parameter enableHTTPS ke true akan meningkatkan biaya penagihan Anda. Untuk informasi selengkapnya, lihat dokumen Product Billing.

3.1.1 Konfigurasi log

Untuk menampilkan log HTTPDNS selama pengembangan aplikasi, konfigurasikan logger saat inisialisasi. Kode berikut memberikan contohnya:

const client = createClient({
  ...,
  logger: console
});

3.2 Resolusi nama domain

3.2.1 Resolusi sinkron non-blocking (Direkomendasikan)

Gunakan metode resolusi sinkron non-blocking yang langsung mengembalikan hasil dari cache tanpa memblokir eksekusi program. Kode berikut memberikan contohnya:

function resolve() {
  const result = client.getHttpDnsResultForHostSyncNonBlocking('www.aliyun.com');
  if (result) {
    console.log('Hasil resolusi:', result.ipv4);
    console.log('Nama domain:', result.domain);
    console.log('IPv6:', result.ipv6);
  } else {
    console.log('Cache miss. Resolusi asinkron sedang berlangsung...');
    // Resolusi asinkron telah dimulai di latar belakang. Panggilan berikutnya akan mengembalikan hasilnya.
  }
}

3.2.2 Resolusi sinkron

Untuk memastikan Anda menerima hasil resolusi, gunakan metode resolusi sinkron yang menunggu hingga proses resolusi selesai sebelum melanjutkan. Kode berikut memberikan contohnya:

async function resolve() {
  try {
    const result = await client.getHttpDnsResultForHostSync('www.aliyun.com');
    console.log('Nama domain:', result.domain);
    console.log('IPv4:', result.ipv4);
    console.log('IPv6:', result.ipv6);
  } catch (error) {
    console.error('Resolusi gagal:', error);
  }
}

Praktik terbaik Node.js

4.1 Cara kerja

  1. Buat fungsi lookup DNS kustom di dalam aplikasi.

  2. Untuk permintaan yang perlu diselesaikan menggunakan HTTPDNS, konfigurasikan agar menggunakan fungsi lookup kustom tersebut.

  3. Dalam fungsi lookup, ambil nama domain yang diminta dan selesaikan menjadi alamat IP menggunakan HTTPDNS.

  4. Dalam fungsi lookup, kembalikan alamat IP yang telah diselesaikan untuk memulai permintaan aktual. Proses ini menghindari penggunaan DNS lokal untuk resolusi.

4.2 Integrasi library jaringan

4.2.1 Integrasi Axios

Integrasikan Axios menggunakan agent. Langkah-langkah utamanya sebagai berikut:

Langkah 1: Buat fungsi lookup kustom

const dns = require('dns');

function createHTTPDNSLookup(httpdnsClient) {
  return (hostname, options, callback) => {
    // Standarkan parameter
    if (typeof options === 'function') {
      callback = options;
      options = {};
    }
  
    // Pastikan callback tersedia
    if (typeof callback !== 'function') {
      throw new Error('callback must be a function');
    }
  
    // Gunakan HTTPDNS untuk menyelesaikan nama domain
    const result = httpdnsClient.getHttpDnsResultForHostSyncNonBlocking(hostname);
  
    if (result) {
      const hasIPv4 = result.ipv4 && result.ipv4.length > 0;
      const hasIPv6 = result.ipv6 && result.ipv6.length > 0;
  
      if (hasIPv4 || hasIPv6) {
        if (options && options.all) {
          // Kembalikan semua alamat IP
          const addresses = [
            ...(hasIPv4 ? result.ipv4.map(ip => ({ address: ip, family: 4 })) : []),
            ...(hasIPv6 ? result.ipv6.map(ip => ({ address: ip, family: 6 })) : [])
          ];
          console.log(`[DNS Lookup] HTTPDNS resolved successfully: ${hostname} -> Returning all IP addresses (${addresses.length})`);
          callback(null, addresses);
        } else {
          // Prioritaskan IPv4, lalu IPv6
          if (hasIPv4) {
            console.log(`[DNS Lookup] HTTPDNS resolved successfully: ${hostname} -> ${result.ipv4[0]} (IPv4)`);
            callback(null, result.ipv4[0], 4);
          } else {
            console.log(`[DNS Lookup] HTTPDNS resolved successfully: ${hostname} -> ${result.ipv6[0]} (IPv6)`);
            callback(null, result.ipv6[0], 6);
          }
        }
        return;
      }
    }
  
    console.log(`[DNS Lookup] No available IP from HTTPDNS. Falling back to system DNS for: ${hostname}`);
    dns.lookup(hostname, options, callback);
  };
}

Langkah 2: Buat agen kustom

const https = require('https');
const httpsAgent = new https.Agent({
  lookup: createHTTPDNSLookup(httpdnsClient),
  keepAlive: true,
  maxSockets: 10
});

Langkah 3: Buat instance Axios

const axios = require('axios');

const instance = axios.create({
  httpsAgent: httpsAgent,
  timeout: 10000
});

// Penggunaan
const response = await instance.get('https://www.aliyun.com');

4.2.2 Integrasi urllib

Integrasikan urllib menggunakan agent. Langkah-langkah utamanya sebagai berikut:

Langkah 1: Buat fungsi lookup kustom

const dns = require('dns');

function createHTTPDNSLookup(httpdnsClient) {
  return (hostname, options, callback) => {
    // Standarkan parameter
    if (typeof options === 'function') {
      callback = options;
      options = {};
    }
  
    // Pastikan callback tersedia
    if (typeof callback !== 'function') {
      throw new Error('callback must be a function');
    }
  
    // Gunakan HTTPDNS untuk menyelesaikan nama domain
    const result = httpdnsClient.getHttpDnsResultForHostSyncNonBlocking(hostname);
  
    if (result) {
      const hasIPv4 = result.ipv4 && result.ipv4.length > 0;
      const hasIPv6 = result.ipv6 && result.ipv6.length > 0;
  
      if (hasIPv4 || hasIPv6) {
        if (options && options.all) {
          // Kembalikan semua alamat IP
          const addresses = [
            ...(hasIPv4 ? result.ipv4.map(ip => ({ address: ip, family: 4 })) : []),
            ...(hasIPv6 ? result.ipv6.map(ip => ({ address: ip, family: 6 })) : [])
          ];
          console.log(`[DNS Lookup] HTTPDNS resolved successfully: ${hostname} -> Returning all IP addresses (${addresses.length})`);
          callback(null, addresses);
        } else {
          // Prioritaskan IPv4, lalu IPv6
          if (hasIPv4) {
            console.log(`[DNS Lookup] HTTPDNS resolved successfully: ${hostname} -> ${result.ipv4[0]} (IPv4)`);
            callback(null, result.ipv4[0], 4);
          } else {
            console.log(`[DNS Lookup] HTTPDNS resolved successfully: ${hostname} -> ${result.ipv6[0]} (IPv6)`);
            callback(null, result.ipv6[0], 6);
          }
        }
        return;
      }
    }
  
    console.log(`[DNS Lookup] No available IP from HTTPDNS. Falling back to system DNS for: ${hostname}`);
    dns.lookup(hostname, options, callback);
  };
}

Langkah 2: Buat agen kustom

const urllib = require('urllib');
const https = require('https');

const httpsAgent = new https.Agent({
  lookup: createHTTPDNSLookup(httpdnsClient),
  keepAlive: true,
  maxSockets: 10
});

Langkah 3: Kirim permintaan

async function request(url, options = {}) {
  // Pilih agent berdasarkan jenis URL
  if (url.startsWith('https://')) {
    options.httpsAgent = httpsAgent;
  } else {
    options.agent = httpAgent; // Buat httpAgent secara serupa
  }
  
  options.timeout = options.timeout || 10000;
  
  try {
    return await urllib.request(url, options);
  } catch (error) {
    // Logika retry otomatis
    if (isConnectionError(error) && !options._retried) {
      options._retried = true;
      delete options.httpsAgent; // Ulangi menggunakan DNS sistem
      return await urllib.request(url, options);
    }
    throw error;
  }
}

API

5.1 Inisialisasi

Inisialisasi konfigurasi saat aplikasi dimulai.

const { createClient } = require('@alicloud-emas/httpdns');

const client = createClient({
  accountId: 'your-account-id',
  secretKey: 'your-secret-key',

  timeout: 5000,                              // Timeout resolusi dalam milidetik
  maxRetries: 1,                              // Jumlah maksimum percobaan ulang
  enableHTTPS: false,                         // Menentukan apakah akan menggunakan HTTPS
  enableCache: true,                          // Menentukan apakah akan menyimpan cache alamat IP
  enableExpiredIP: true,                      // Menentukan apakah akan mengizinkan penggunaan alamat IP kedaluwarsa
});

Parameter:

Parameter

Tipe

Wajib

Fitur

accountId

String

Parameter wajib

AccountId

secretKey

String

Parameter opsional

Kunci tanda tangan

bootstrapIPs

Array

Parameter opsional

Daftar alamat IP bootstrap

timeout

Number

Parameter opsional

Timeout resolusi

maxRetries

Number

Parameter opsional

Jumlah maksimum percobaan ulang

enableHTTPS

Boolean

Parameter opsional

Menentukan apakah akan menggunakan HTTPS

enableCache

Boolean

Parameter opsional

Menentukan apakah akan menyimpan cache alamat IP

logger

Object

Parameter opsional

Logger

enableExpiredIP

Boolean

Parameter Opsional

Menentukan apakah akan mengizinkan penggunaan alamat IP kedaluwarsa

Penting

Mengatur parameter enableHTTPS ke true akan meningkatkan biaya penagihan Anda. Untuk informasi selengkapnya, lihat dokumen Product Billing.

5.2 Pra-selesaikan nama domain

Tetapkan daftar nama domain untuk pra-resolusi sehingga SDK dapat menyelesaikannya lebih awal dan mengurangi latensi pada permintaan resolusi berikutnya.

// Tetapkan daftar pra-resolusi
client.setPreResolveHosts(['www.aliyun.com']);

5.3 Resolusi sinkron non-blocking

Selesaikan nama domain tertentu. Metode ini langsung mengembalikan hasil dari cache tanpa memblokir proses.

const result = client.getHttpDnsResultForHostSyncNonBlocking('www.aliyun.com');
if (result) {
  console.log('Hasil cache:', result.ipv4);
}

Parameter:

Parameter

Tipe

Wajib

Fitur

domain

String

Parameter wajib

Nama domain

options

Object

Parameter opsional

Opsi resolusi

Deskripsi bidang JSON yang dikembalikan:

Bidang

Tipe

Fitur

domain

String

Nama domain

ipv4

Array

Daftar alamat IPv4

ipv6

Array

Daftar alamat IPv6

ipv4Ttl

Number

Waktu kedaluwarsa IPv4

ipv6Ttl

Number

Waktu kedaluwarsa IPv6

ipv4Timestamp

Date

Timestamp resolusi IPv4

ipv6Timestamp

Date

Timestamp resolusi IPv6

5.4 Resolusi sinkron

Selesaikan secara sinkron nama domain tertentu.

const result = await client.getHttpDnsResultForHostSync('www.aliyun.com');
console.log('Hasil resolusi:', result);

5.5 Manajemen klien

Ambil status klien dan kelola siklus hidup klien.

// Periksa status kesehatan klien
const isHealthy = client.isHealthy();

// Dapatkan daftar alamat IP layanan saat ini
const serviceIPs = client.getServiceIPs();

// Perbarui manual alamat IP layanan
await client.updateServiceIPs();

// Matikan klien
await client.close();

Ringkasan

Topik ini menjelaskan cara menggunakan SDK HTTPDNS dalam lingkungan Node.js dan memberikan praktik terbaik. Mengintegrasikan SDK dengan library jaringan menggunakan agent membantu Anda mencapai resolusi nama domain berkinerja tinggi dan berdaya tahan tinggi. Fitur utamanya sebagai berikut:

  1. Mudah digunakan: Menyediakan operasi API yang sederhana dan mendukung resolusi sinkron maupun sinkron non-blocking.

  2. Ketersediaan tinggi: Mendukung kebijakan failover dan menurunkan spesifikasi untuk memastikan stabilitas layanan.

  3. Optimalisasi kinerja: Menyertakan mekanisme caching bawaan dan penggunaan kembali koneksi untuk meningkatkan efisiensi resolusi.

  4. Aman dan andal: Mendukung resolusi terautentikasi dan komunikasi HTTPS untuk menjamin keamanan data.

Ikuti praktik terbaik dalam topik ini untuk mengintegrasikan layanan HTTPDNS secara efisien ke dalam aplikasi Node.js Anda.