Node.js'de HTTP nesnesini kullanma

İçindekiler
NS HTTP modülü yazılı uygulamalarımızda Node.js Sunucularımızı hayata geçirmek için işlevselliğin bir bölümünü oluşturmamıza yardımcı olurlar, ancak bu, bu modüle verebileceğimiz özel kullanım değildir.
gerçek gücü HTTP farklı istekleri işlemek için nesnenizi kullandığımızda görülür veya rica etmek uygulamamızdan gelebilecek, bununla gelen verileri işleyebiliriz. İLETİ formlar veya müşteri istekleri aracılığıyla DİNLENMEK.
Eğitim gereksinimleriBu eğitimde önerilen alıştırmaları gerçekleştirmek için işlevsel bir kuruluma sahip olmalıyız. Node.js sistemimizde ve buna erişim izinleri var. Örnekleri kodlamak için zengin bir metin düzenleyiciye erişebilmek de önemlidir, rahat hissettiğimiz her şeyi kullanabiliriz, ancak kullanım kolaylığı için öneririz. Yüce metin veya Not Defteri ++ ayrıca sözdizimi için eklentileri olan JavaScript Y HTML.
Veri işleme İLETİ formlardan veri almamıza izin verir, bununla uygulamalarımızla kullanıcı etkileşimlerinden gelen verileri işleyebilir, böylece söz konusu verileri işlemek için iş mantığını uygulamamıza izin veririz.
Verileri işlemenin en doğrudan yolu İLETİ bitti HTTP nesnesiyöntem ile doğrudan etkileşim yoluyla sunucu oluştur () isteğin yönteminin türünü de tanımlayabiliriz İLETİ veya ELDE ETMEK ve hatta KOY Y SİLMEK.
Gözlemciysek, bunun uygulamalarımız hakkında bir şekilde düşünmemizi sağladığını görüyoruz. dinlenmek, yani, formlarla değil, farklı istemciler aracılığıyla onunla iletişim kurabiliriz. HTMLAncak bu, bu öğreticinin ötesine geçen bir konudur.
Yapacağımız ilk şey, uygulamamızın verilerini tarayıcıda yakalamamıza izin verecek küçük bir form oluşturmak, bunun için adında bir dosya oluşturacağız. form.html uygulamamızın dizini veya klasöründe.
İkincisi bir üretim ortamında önerilmez, bu nedenle onu yalnızca sistemin nasıl çalıştığını gösterebilmek için referans olarak alacağız. HTTP nesnesi. Formumuzun kodu aşağıdaki gibi olacaktır.


Gördüğümüz gibi, sadece formumuza yöntemi kullanması gerektiğini belirtiyoruz. İLETİ, birkaç metin alanımız ve son olarak bir düğmemiz var. Sunmak verilerimizi sunucuya göndermek için.
Şimdi sunucuyu oluşturmalıyız Node.js formdan veri toplamamıza yardımcı olacak, burada iki olasılığı dikkate almalıyız, ilki uygulamamızın yoluna eriştiğimizde, bu yöntemi kullanacak ELDE ETMEK ve burası formumuzu göstermemiz gereken yer.
İkinci olasılık, form verilerinin gönderildiği zamandır ve bunun için yöntemi doğrulamamız gerekir. İLETİ egzersizin amacı budur. Formu görüntüleyebilmemiz için dosyamızı okuyan senkron bir bileşen oluşturmalıyız. form.html ve ilgili rotada servis yapın, bunun için yönteme güvenebiliriz readFileSync modülün fs.
Bir sonraki bölümde sunucumuzun verileri işleyebilmesini sağlamalıyız. İLETİ, bunun için konsolda ne aldığımızı yöntemle göstereceğiz. konsol.log (), bu şekilde her şeyin düzgün çalıştığını doğrulayabiliriz, istediğimizi elde etmek için ilk kodu görelim:
 var http = gerektirir ('http'); var sorgu dizesi = gerektirir ('sorgu dizesi'); var util = gerektirir ('util'); var form = gerektirir ('fs'). readFileSync ('form.html'); http .createServer (işlev (istek, yanıt) {if (request.method === "POST") {var dataPost = ''; request.on ('veri', işlev (yığın) {dataPost + = yığın;}). on ('end', function () {var dataPostObject = querystring.parse (dataPost); console.log ('Kullanıcı tarafından gönderilen veriler: \ n', dataPost); response.end ('Veri gönderdiniz: \ n '+ util.inspect (dataPostObject));});} if (request.method === "GET") {response.writeHead (200, {' Content-Type ':' text / html '}); yanıt.end ( form);}}).dinle (8082);
Her şeyi olabildiğince okunaklı hale getirmek için modüller ek olarak dahil edildi. sorgu dizesi Y İşe yarar, onlarla sunucudan gelen bilgileri işleyebilir ve böylece yazdırmak için manipüle edebiliriz.
Uygulamamızı başlattığımızda ve projenin kök yolundaki tarayıcıyı açtığımızda formumuzun başlangıçta nasıl görünmesi gerektiğine bakalım:

BÜYÜT

Şimdi formumuzda gördüğümüz metin alanlarına bazı veriler gireceğiz ve gönder düğmesine tıklayacağız, bu bize gönderilen verilerin bir ekranını sunacak ve konsolu bize yazdıracaktır. düz istek, yani, uygulamamız tarafından alındığı şekliyle:

Form verilerini işlemenin, en azından tekrar göstermenin çok kolay olduğunu gördük.
Önceki örnek doğru çalışsa da, uygulamanın üretime geçmesi durumunda bazı zayıflıkları vardır, örneğin, bize sunucumuzun belleğinin destekleyebileceğinden daha fazla veri gönderirse ne olur? tüm yapı çökecek. Eğer veri alırsak İLETİ boş, uygulamamızın mevcut durumunda başarısız olur ve hizmetimizin çökmesine ve çalışmayı durdurmasına neden olacak bir hata alırdık.
Bu kusurları düzeltmek için bazı çok basit doğrulamaları dahil etmemiz yeterlidir, her şeyden önce alınan verileri maksimum ile sınırlamamıza yardımcı olacak bir değişken dahil edeceğiz. 2 MBBu bize, en azından birkaç kullanıcıyla sistemin çökmesinin mümkün olmayacağı konusunda biraz güvenlik sağlayabilir. Sonra bunu değerlendireceğiz, böylece isteğimiz İLETİ üzerinde işlenmek HTTP nesnesi içeren boş olamaz, bu nedenle sunucumuzda doğrudan arıza olmamasını sağlıyoruz. Yukarıdaki koda uygun değişikliklerle bakalım:
 var http = gerektirir ('http'); var sorgu dizesi = gerektirir ('sorgu dizesi'); var util = gerektirir ('util'); var form = gerektirir ('fs'). readFileSync ('form.html'); var maxData = 2 * 1024 * 1024; http.createServer (işlev (istek, yanıt) {if (request.method === "POST") {var dataPost = ''; request.on ('veri', işlev (yığın) {dataPost + = yığın; if ( dataPost.length> maxData) {dataPost = ''; this.destroy (); response.writeHead (413); response.end ('Girilen veriler kapasitemizi aşıyor');}}). on ('end', function () {if (! PostData) {response.end (); dönüş;} var ObjectPostData = querystring.parse (PostData); console.log ('Kullanıcı verileri gönderdi: \ n', PostData); response.end ( 'Verileri gönderdiniz: \ n' + util.inspect (datosPostObjeto));});} if (request.method === "GET") {response.writeHead (200, {'Content-Type': ') text / html '}); response.end (form);}}).dinle (8082);
2 MB'den büyük veri alırsak, sadece bir başlık yazarız HTTP 413 Durumu belirtmek ve sunucumuza gereksiz yük bindirmemek için alınan verileri derhal imha ediyoruz.
Boş veri almamız durumunda İLETİ, hizmetin beklenmedik bir şekilde ölmesini önleyerek yürütmemize devam ediyoruz.
Yönteme verebileceğimiz başka bir kullanım İLETİ nın-nin HTTP dosyaları alabilmek için, bunun için sistemimize bir tamamlayıcı kurmalıyız ve konsolda bu amaca ulaşmak için müthiş bir paket. Node.js aşağıdaki kodu çalıştıracağız:
 npm [email protected] yükleyin
Bu aşağıdaki gibi olmalıdır:

Bir sonraki eylemimizi değiştireceğiz form.html aşağıdaki kodla:


Temel olarak yaptığımız şey, formun başlığını değiştirmekti, böylece sunucumuz sadece metinden daha fazlasını alacağını biliyor ve ayrıca metin alanlarını dosyalara çevirdik. Sonunda dosyamızı değiştireceğiz server.js ve aşağıdaki kodu yerleştireceğiz:
 var http = gerektirir ('http'); var müthiş = gerektirir ('korkunç'); var form = gerektirir ('fs'). readFileSync ('form.html'); http.createServer (işlev (istek, yanıt) { if (request.method === "POST") {var gelen = new formidable.IncomingForm (); incoming.uploadDir = 'dosyalar'; incoming.on ('dosya', işlev (alan, dosya) {if (! dosya) .size) {return;} response.write (dosya.adı + 'alınan \ n');}). on ('son', işlev () {response.end ('Tüm dosyalar alındı');}); incoming.parse (request);} if (request.method === "GET") {response.writeHead (200, {'Content-Type': 'text / html'}); response.end (form); } }) dinle (8082);
Modülün nasıl olduğunu görüyoruz zorlu dosyaların yüklenmesini işlememize yardımcı olan kişidir, bu onları adlı bir klasörde saklayacaktır. kayıtlar, hedef klasörün çalışması için yazma iznine sahip olması gerekir Node.js.
Bu son ile öğreticimizi bitirdik, gördüğümüz gibi, istekleri işleyebileceğimiz birden fazla seçeneğimiz var. İLETİ nesneyi kullanmak HTTP sunucumuzda Node.js, geliştirmelerimize kattığı tüm avantajlara ek olarak.

Arkadaşlarınızla sayfasını paylaşan sitenin gelişimine yardımcı olacak

wave wave wave wave wave