Bruke HTTP -objektet i Node.js

Innholdsfortegnelse
De HTTP -modul i våre applikasjoner skrevet inn Node.js De hjelper oss med å bygge en del av funksjonaliteten for å gjøre serverne våre levende, men dette er ikke den eksklusive bruken vi kan gi denne modulen.
Den sanne kraften til HTTP blir sett når vi bruker objektet ditt til å behandle de forskjellige forespørslene eller be om som kan komme fra applikasjonen vår, med dette kan vi behandle dataene som kommer fra POST gjennom skjemaer eller kundeforespørsler HVILE.
OpplæringskravFor å utføre øvelsene som er foreslått i denne opplæringen må vi ha en funksjonell installasjon av Node.js i systemet vårt og har tillatelser til å få tilgang til det. Det er også viktig å ha tilgang til en rik tekstredigerer for å kode eksemplene. Vi kan bruke det vi føler oss komfortable med, men for enkel brukervennlighet anbefaler vi Sublim tekst eller NotePad ++ som også har tillegg for syntaksen JavaScript Y HTML.
Databehandling POST lar oss skaffe data fra skjemaer, med dette kan vi håndtere data som kommer fra brukerinteraksjoner med applikasjonene våre, og dermed tillate oss å implementere forretningslogikk for å behandle nevnte data.
Den mest direkte måten vi må behandle dataene på POST det er gjennom HTTP -objekt, gjennom direkte interaksjon med metoden createServer () vi kan identifisere type metode for forespørselen, enten POST eller Til og med SETTE Y SLETT.
Hvis vi er observatører, ser vi at dette får oss til å tenke på applikasjonene våre på en måte Avslappende, det vil si at vi kan kommunisere med det gjennom forskjellige klienter og ikke nødvendigvis med skjemaer HTMLDet er imidlertid et emne som går utover denne opplæringen.
Det første vi skal gjøre er å lage et lite skjema som lar oss fange dataene til applikasjonen vår i nettleseren, for dette skal vi lage en fil som heter form.html i katalogen eller mappen til programmet vårt.
Sistnevnte anbefales ikke i et produksjonsmiljø, så vi vil bare ta det som en referanse for å kunne demonstrere hvordan systemet fungerer. HTTP -objekt. Koden for skjemaet vårt vil være følgende:


Som vi kan se, indikerer vi ganske enkelt for vår form at den må bruke metoden POST, vi har et par tekstfelt, og til slutt en knapp sende inn for å sende dataene våre til serveren.
Nå må vi lage serveren Node.js som vil hjelpe oss med å samle inn data fra skjemaet, her må vi ta hensyn til to muligheter, den første er når vi får tilgang til banen til applikasjonen vår, dette vil være å bruke metoden og det er her vi skal vise formen vår.
Den andre muligheten er når skjemadata sendes, og for dette må vi validere metoden POST som er målet med øvelsen. For at vi skal vise skjemaet, må vi lage en synkron komponent som leser filen vår form.html og server den i den tilsvarende ruten, for dette kan vi stole på metoden readFileSync av modulen fs.
I den neste delen må vi gjøre at serveren vår kan håndtere dataene POST, for dette skal vi ganske enkelt vise hva vi mottar i konsollen med metoden console.log ()På denne måten kan vi bekrefte at alt fungerer som det skal, la oss se den første koden for å oppnå det vi ønsker:
 var http = require ('http'); var querystring = require ('querystring'); var util = require ('util'); var form = require ('fs'). readFileSync ('form.html'); http .createServer (funksjon (forespørsel, svar) {if (request.method === "POST") {var dataPost = ''; request.on ('data', function (chunk) {dataPost + = chunk;}). on ('end', function () {var dataPostObject = querystring.parse (dataPost); console.log ('Bruker sendt data: \ n', dataPost); response.end ('Du har sendt data: \ n'+ util.inspect (dataPostObject));});} if (request.method === "GET") {response.writeHead (200, {'Content-Type': 'text / html'}); response. end ( form);}}). lytt (8082);
For å gjøre alt så lesbart som mulig, ble modulene i tillegg innlemmet querystring Y Nyttig, med dem kan vi behandle informasjonen som kommer fra serveren og dermed kunne manipulere den med å skrive den ut.
La oss se hvordan skjemaet vårt først skal se ut når vi starter applikasjonen vår og åpner nettleseren ved prosjektets rotbane:

FORSTØRRE

Vi skal nå legge inn noen data i tekstfeltene som vi ser i skjemaet vårt og klikke på send -knappen, dette vil vise oss et skjermbilde med dataene som sendes, og det vil skrive ut konsollen til oss. be om vanlig, det vil si slik den mottas av søknaden vår:

Vi har da sett at det har vært veldig enkelt å behandle skjemadataene, i hvert fall for å vise det igjen.
Selv om det forrige eksemplet fungerer som det skal, har det noen svakheter ved at hvis programmet skulle komme i produksjon, kan det føre til mer hodepine, for eksempel hva som skjer hvis det sender oss mer data enn serverens minne kan støtte, åpenbart vår hele strukturen ville kollapse. Hvis vi mottar data fra POST tom, i den nåværende tilstanden til applikasjonen vår ville den mislykkes, og vi ville få en feil som ville få vår tjeneste til å krasje og slutte å fungere.
For å rette opp disse feilene må vi bare innlemme noen veldig enkle valideringer, først og fremst skal vi innlemme en variabel som vil hjelpe oss med å begrense mottatte data til maksimalt 2 MBDette kan gi oss litt sikkerhet for at det i hvert fall med få brukere ikke vil være mulig for systemet å krasje. Deretter vil vi vurdere det slik at vår forespørsel POST bli behandlet på HTTP -objekt som inneholder den, kan ikke være tom, så vi sikrer at det ikke er noen direkte feil på serveren vår. La oss se på koden ovenfor med de riktige modifikasjonene:
 var http = require ('http'); var querystring = require ('querystring'); var util = require ('util'); var form = require ('fs'). readFileSync ('form.html'); var maxData = 2 * 1024 * 1024; http.createServer (funksjon (forespørsel, svar) {if (request.method === "POST") {var dataPost = ''; request.on ('data', function (chunk) {dataPost + = chunk; if ( dataPost.length> maxData) {dataPost = ''; this.destroy (); response.writeHead (413); response.end ('De innlagte dataene overskrider vår kapasitet');}}). on ('end', funksjon () {if (! PostData) {response.end (); return;} var ObjectPostData = querystring.parse (PostData); console.log ('Brukeren sendte dataene: \ n', PostData); response.end ( 'Du har sendt dataene: \ n' + util.inspect (datosPostObjeto));});} if (request.method === "GET") {response.writeHead (200, {'Content-Type': ' tekst / html '}); response.end (form);}}). lytt (8082);
Hvis vi mottar data som er større enn 2 MB, skriver vi bare en overskrift HTTP 413 for å angi saken, og vi ødelegger umiddelbart mottatte data for ikke å beholde belastningen på serveren vår unødvendig.
I tilfelle vi mottar tomme data fra POST, vi bare fortsetter vår henrettelse og forhindrer at tjenesten dør uventet.
En annen bruk som vi kan gi til metoden POST av HTTP er for å kunne motta filer, for dette må vi installere et komplement i systemet vårt, og det er den formidable pakken for å nå dette målet i konsollen Node.js vi skal utføre følgende kode:
 npm installer [email protected]
Dette bør være som følger:

Neste handling skal vi endre vår form.html med følgende kode:


I utgangspunktet var det vi gjorde å endre overskriften på skjemaet slik at serveren vår vet at den kommer til å motta noe mer enn bare tekst, og vi endret også tekstfeltene til filer. Til slutt skal vi endre filen vår server.js og vi vil plassere følgende kode:
 var http = require ('http'); var formidable = require ('formidable'); var form = require ('fs'). readFileSync ('form.html'); http.createServer (funksjon (forespørsel, svar) { if (request.method === "POST") {var incoming = new formidable.IncomingForm (); incoming.uploadDir = 'files'; incoming.on ('file', function (field, file) {if (! file .size) {return;} response.write (filnavn + 'mottatt \ n');}). på ('slutt', funksjon () {response.end ('Alle filer ble mottatt');}); incoming.parse (forespørsel);} if (request.method === "GET") {response.writeHead (200, {'Content-Type': 'text / html'}); response.end (form);} }). lytte (8082);
Vi ser hvordan modulen formidabel er den som hjelper oss med å behandle opplasting av filer, dette lagrer dem i en mappe som heter poster, som for at målmappen skal fungere må ha skrivetillatelse til Node.js.
Med denne siste har vi fullført opplæringen vår, da vi så at vi har flere alternativer som vi kan behandle forespørslene med POST bruker objektet HTTP på vår server Node.js, i tillegg til alle fordelene det gir til vår utvikling.
wave wave wave wave wave