Node.js kullanarak HTTP Web Sunucusu Oluşturma Code Örnek E-posta

⚡ Akıllı Özet

Node.js, yerleşik http modülünü kullanarak birkaç satır kodla çalışan bir web sunucusu oluşturur. Sunucu, seçilen bir portta dinleme yapar ve her isteğe bir durum kodu ve gövde ile yanıt verirken, ayrı bir kod diğer sitelerden veri çeker.

  • 🖥️ Sunucu Oluşturma: `http.createServer`, gelen her istek için bir kez çalışan ve istek ve yanıt nesnelerini alan bir geri çağırma işlevi kaydeder.
  • 🔢 Durum ve Başlıklar: `writeHead` fonksiyonu, herhangi bir gövde içeriği yazılmadan önce durum kodunu ve `Content-Type` bilgisini gönderir.
  • 🔌 Bağlantı Noktası Bağlama: `server.listen` komutu, uygulamayı bir porta bağlar ve herhangi bir boş port numarası seçilebilir.
  • 📥 Giden İstekler: Başka bir siteden veri çekmek için bir HTTP istemcisine ihtiyaç duyulur ve Node artık global bir veri çekme fonksiyonu sunmaktadır.
  • ⚠️ Kullanımdan Kaldırılmış İstemci: İstek modülü Şubat 2020'de kullanımdan kaldırılmıştır ve yeni kodlarda kullanılmamalıdır.
  • Başlangıç ​​Başarısızlıkları: EADDRINUSE hatası, seçilen portun zaten başka bir işlem tarafından kullanıldığı anlamına gelir.

Node.js'de HTTP Web Sunucusu oluşturun

MKS node.js Bu çerçeve çoğunlukla sunucu tabanlı uygulamalar oluşturmak için kullanılır. Kullanıcılara içerik sunan web sunucuları oluşturmak için kolaylıkla kullanılabilir.

Sunucuyla ilgili istekleri çeşitli modüller işler, yerleşik olanlar da bunlardan biridir. http Bunların başında modül geliyor. Node.js kullanarak temel bir web sunucu uygulaması oluşturmayı ve ardından başka bir siteden veri istemeyi inceleyeceğiz.

HTTP kullanan bir web sunucusu olarak Node

Şimdi ilk Node.js uygulamasının nasıl oluşturulup çalıştırılacağına dair bir örneğe bakalım.

Uygulama, 7000 numaralı bağlantı noktasında dinleme yapan basit bir sunucu modülü oluşturur. Tarayıcı üzerinden bu bağlantı noktasına bir istek gönderildiğinde, sunucu bir yanıt gönderir. Merhaba Dünya Müşteriye verilen yanıt.

HTTP kullanan bir web sunucusu olarak Node

Code açıklama

  1. MKS require fonksiyon bir şeyi okur JavaSenaryo Dosyayı çalıştırır ve dışa aktarılan verileri içeren nesneyi döndürür. Burada dosyayı yükler. http Bu modül, işlevselliğinin uygulamada kullanılabilir olmasını sağlar.
  2. Bir sunucu uygulaması basit bir fonksiyondan oluşturulur. Bu fonksiyon, sunucuya her istek ulaştığında çalışır.
  3. Bir istek alındığında, yanıt şu durum bilgisiyle birlikte gönderilir: 200Bu, başarılı bir yanıt için HTTP başlığındaki standart durum kodudur.
  4. Yanıt gövdesi, metin dizisinin kendisidir. Merhaba Dünya.
  5. server.listen Bu komut, uygulamanın 7000 numaralı porttan gelen istemci isteklerini dinlemesini sağlar. Kullanılabilir herhangi bir port kullanılabilir.

Komut başarıyla çalıştırılırsa, tarayıcıda aşağıdaki çıktı görünür.

Çıktı

Node web sunucusu çıktısı

Çıktıdan:

  • localhost'a göz atma URL 7000 numaralı bağlantı noktasında şu dize görüntülenir: Merhaba Dünya sayfada.
  • Kod 7000 numaralı portu belirttiği için, çıktı yalnızca bu porta erişildiğinde görünür.

İşte referans olarak kullanabileceğiniz kod:

var http = require('http');

var server = http.createServer(function(request, response) {
    response.writeHead(200, { "Content-Type": "text/plain" });
    response.end("Hello World\n");
});

server.listen(7000);

Node.js'de GET İsteklerini İşleme

Node.js'de başka bir siteden veri almak için GET isteği yapmak oldukça basittir. Geçmişte bunun için şunlara ihtiyaç duyuluyordu: request Komut satırından yüklenen modül:

npm install request

Bu komut, Node paket yöneticisinden gerekli modülü indirmesini ve kurmasını ister. Kurulum başarılı olduğunda, komut satırı kurulu modülün adını ve sürümünü şu biçimde gösterir: <name>@<version>.

npm install isteğinin çıktısı

Yukarıdaki fotoğrafta, request Modül ve sürüm numarası indirildi ve kuruldu.

Node.js'de GET isteği oluşturma

Code açıklama

  1. MKS request Önceki adımda kurulan modül, web sitelerine GET istekleri göndermek için gerekli işlevleri sağlar.
  2. Bir siteye GET isteği gönderilir ve yanıt geldiğinde bir geri çağırma işlevi çalışır. Geri çağırma işlevi üç parametre alır:
    1. Hata — İstek yapılırken ortaya çıkan hataları kaydeder.
    2. yanıt — yanıtla birlikte gelen HTTP başlıklarını taşır.
    3. Vücut — yanıtın tüm içeriğini içerir.
  3. Alınan içerik body Parametre konsola yazdırılır.

İşte referans olarak kullanabileceğiniz kod:

var request = require("request");

request("https://example.com", function(error, response, body) {
    // Always check the error parameter before using the body
    if (error) {
        console.error("Request failed:", error.message);
        return;
    }
    console.log(body);
});

⚠️ Kullanımdan kaldırılma bildirimi: the request modül Şubat 2020'de tamamen kullanımdan kaldırıldı. ve başka güncelleme almaz. Yine de yüklenir ve çalışır, bu nedenle yukarıdaki örnek mevcut projeler için geçerliliğini korur, ancak npm install request Artık bir kullanım dışı bırakma uyarısı veriyor. Yeni kodlar yerleşik özelliği kullanmalıdır. fetch Bir sonraki bölümde gösterilen işlev.

Node.js'de Native fetch kullanarak HTTP istekleri nasıl yapılır?

Node küresel bir özellik ekledi. fetch Bu işlev, 18. sürümden itibaren tarayıcıların zaten sağladığı API ile uyumludur. Herhangi bir paket kurulumu gerekmez ve işlev bir promise döndürdüğü için doğrudan çalışır. async/await.

// No require and no npm install needed on Node 18 or later

async function getData() {
    try {
        const response = await fetch("https://example.com");

        // fetch does NOT reject on 404 or 500 — check ok yourself
        if (!response.ok) {
            throw new Error("HTTP status " + response.status);
        }

        const body = await response.text();
        console.log(body);

    } catch (err) {
        // Network failures and the throw above both land here
        console.error("Request failed:", err.message);
    }
}

getData();

Geri arama tarzından üç farka dikkat çekmekte fayda var. Birincisi, fetch Yalnızca ağ düzeyinde bir hata durumunda reddeder; HTTP 404 veya 500 hatası yine de başarıyla çözümlenir, bu yüzden response.ok Bu kontrolün var olmasının ve bir yerden diğerine geçerken bunu atlamanın neden en yaygın hata olduğunun açıklaması requestİkincisi, metin yanıtla birlikte iletilmez; metin, yanıtla birlikte açıkça okunmalıdır. response.text() düz metin için veya response.json() JSON için ve bunların her biri kendi vaadini döndürür. Üçüncüsü, tüm çağrı vaat tabanlı olduğundan, tek bir try/catch Bu, hem isteği hem de okunan gövdeyi kapsar ve hata öncelikli geri çağırma parametresini tamamen değiştirir.

Node 16 veya daha önceki sürümlerde çalışması gereken komut dosyaları için şunu yükleyin: node-fetch or axios Bunun yerine, her ikisi de karşılaştırılabilir bir vaat tabanlı arayüz sunduğundan ve çalışma zamanı yükseltildikten sonra yalnızca içe aktarma satırında bir değişiklik gerektirdiğinden, bu yöntem tercih edilir.

Request, Fetch ve Axios: Hangisini Kullanmalı?

Node.js ile ilgili çoğu kaynakta üç HTTP istemcisi bulunur ve bunlardan yalnızca biri yeni çalışmalar için mantıklı bir varsayılan seçenektir. Bakım durumları, bir bağımlılığa ihtiyaç duyulup duyulmadığı ve her birinin hata durumunu nasıl bildirdiği açısından farklılık gösterirler; bu nedenle aşağıdaki tabloda bunlar yan yana gösterilmiştir.

Görünüş talep getir (yerleşik) AXIOS
Durum 2020'dan beri kullanımdan kaldırılıyor Çekirdekte muhafaza edildi Aktif bakımlı
Montaj npm paketi Node 18+'da hiçbiri yok. npm paketi
stil Hata öncelikli geri çağırma Söz Söz
JSON ayrıştırma Manuel veya JSON seçeneği response.json() aracılığıyla manuel olarak Otomatik
404 veya 500 hatası nedeniyle reddedilen başvurular Yok hayır Yok hayır Evet

Kullanım fetch Mevcut Node sürümünde yeni projeler için, herhangi bir bağımlılık eklemediği ve geliştiricilerin zaten bildiği tarayıcı API'siyle eşleştiği için tercih edin. axios Otomatik JSON işleme, istek engelleyiciler veya hata durumlarında reddetme gibi yöntemler gerçek kod tasarrufu sağlayacaksa, bu yöntemleri kullanın. request Yalnızca halihazırda ona bağımlı olan ve onu değiştirmeyi planlayan eski uygulamaların içinde.

Sık Karşılaşılan Node.js Sunucu Hataları ve Bunların Nasıl Düzeltileceği

İlk Node sunucusunu başlatırken yaşanan hataların çoğu, sunucu kodunun kendisinden ziyade portlardan, yollardan veya yanıt alınamamasından kaynaklanır.

  • EADDRINUSE: Başka bir işlem zaten portu meşgul ediyor. Çalıştırın. netstat -ano | findstr :7000 on Windowsya da lsof -i :7000 on macOS Linux kullanıyorsanız, o işlemi durdurun veya farklı bir port seçin.
  • Düşük port üzerinden EACCES: 1024'ün altındaki portlar için yükseltilmiş ayrıcalıklar gereklidir. Geliştirme sırasında 3000 veya 7000 gibi 1024'ün üzerinde bir port kullanın.
  • Tarayıcı donuyor ve asla yüklenmiyor: Görevli hiç aramadı. response.end()Bağlantı zaman aşımına uğrayana kadar açık kalır, bu nedenle işleyici üzerinden geçen her yol yanıtı sonlandırmalıdır.
  • 'http' modülü bulunamadı: Dosya adı yanlış yazılmış veya komut dosyası Node yerine tarayıcıda çalışıyor. Temel modüllerin kurulumu gerekmez.
  • Değişiklikler görünmüyor: Node, dosyayı başlangıçta bir kez yükler. Her düzenlemeden sonra işlemi yeniden başlatın veya bir izleyici altında çalıştırın, örneğin... node --watch server.js.

SSS

HTTP modülü tek bir uç nokta için yeterlidir. Express, yönlendirme, ara yazılım ve gövde ayrıştırma özelliklerini ekler; bu özellikler, bir uygulama birden fazla rotaya hizmet verdiğinde bağımlılığı haklı çıkarır.

Gerektirir https Bunun yerine modülü kullanın ve createServer'a bir anahtar ve sertifika iletin. Üretim ortamında, Nginx gibi bir ters proxy normalde TLS'yi sonlandırır ve düz HTTP'yi Node'a iletir.

Evet. AI Araçlar, hata öncelikli geri çağırmaları güvenilir bir şekilde async await'e dönüştürür. Oluşturulan kodun response.ok testini eklediğinden emin olun, çünkü fetch 404 durumunda çözümlenir ve bu kontrol genellikle atlanır.

Yapay zekâ asistanları hata kodunu okuyup doğrudan nedenini belirleyerek, port çakışmasını izin sorunundan veya sözdizimi hatasından ayırt edebiliyor; bu da ilk Node projesinde tahmin yürütme ihtiyacını önemli ölçüde azaltıyor.

İstek nesnesi bir akıştır, bu nedenle veri olaylarını bir arabelleğe toplayın ve son olayda sonucu ayrıştırın. Express ve benzeri çerçeveler, bu adımı sizin için gerçekleştiren gövde ayrıştırma ara yazılımları sağlar.

Bu yazıyı şu şekilde özetleyin: