Innehållsförteckning
De HTTP -modul inom våra ansökningar skrivna in Node.js De hjälper oss att bygga en del av funktionaliteten för att få våra servrar att komma till liv, men detta är inte den exklusiva användningen som vi kan ge denna modul.Den sanna kraften i HTTP syns när vi använder ditt objekt för att behandla de olika förfrågningarna eller begäran som kan komma från vår applikation, med detta kan vi behandla data som kommer från POSTA genom formulär eller kundförfrågningar RESTEN.
HandledningskravFör att utföra de övningar som föreslås i denna handledning måste vi ha en funktionell installation av Node.js i vårt system och har behörighet att komma åt det. Det är också viktigt att kunna ha tillgång till en rich text -editor för att koda exemplen, vi kan använda vad vi än känner oss bekväma med, men för enkel användning rekommenderar vi Sublim text eller NotePad ++ som också har tillägg för syntaxen JavaScript Y HTML.
Databehandling POSTA tillåter oss att skaffa data från formulär, med detta kan vi hantera data som kommer från användarinteraktioner med våra applikationer, vilket gör att vi kan implementera affärslogik för att behandla nämnda data.
Det mest direkta sättet vi har att bearbeta data POSTA det är genom HTTP -objekt, genom direkt interaktion med metoden createServer () vi kan identifiera typen av förfrågan POSTA eller SKAFFA SIG och även SÄTTA Y RADERA.
Om vi är observatörer ser vi att detta får oss att tänka på våra applikationer på ett sätt Rogivande, det vill säga att vi kan kommunicera med det genom olika klienter och inte nödvändigtvis med formulär HTMLDet är dock ett ämne som går utöver denna handledning.
Det första vi kommer att göra är att skapa en liten form som gör att vi kan fånga data från vår applikation i webbläsaren, för detta kommer vi att skapa en fil som heter form.html i katalogen eller mappen i vår applikation.
Det senare rekommenderas inte i en produktionsmiljö så vi tar det bara som en referens för att kunna visa hur systemet fungerar. HTTP -objekt. Koden för vårt formulär kommer att vara följande:
Som vi kan se indikerar vi helt enkelt för vår form att den måste använda metoden POSTA, vi har ett par textfält och slutligen en knapp Skicka in för att skicka våra data till servern.
Nu måste vi skapa servern Node.js som hjälper oss att samla in data från formuläret, här måste vi ta hänsyn till två möjligheter, den första är när vi öppnar sökvägen till vår applikation, detta kommer att använda metoden SKAFFA SIG och det är här vi ska visa vår form.
Den andra möjligheten är när formulärdata skickas och för detta måste vi validera metoden POSTA vilket är målet med övningen. För att vi ska kunna visa formuläret måste vi skapa en synkron komponent som läser vår fil form.html och servera den på motsvarande rutt, för detta kan vi lita på metoden readFileSync av modulen fs.
I nästa del måste vi få vår server att hantera data POSTA, för detta kommer vi helt enkelt att visa vad vi får i konsolen med metoden console.log (), på detta sätt kan vi bekräfta att allt fungerar korrekt, låt oss se den första koden för att uppnå det vi vill:
var http = require ('http'); var querystring = require ('querystring'); var util = require ('util'); var form = require ('fs'). readFileSync ('form.html'); http .createServer (funktion (begäran, svar) {if (request.method === "POST") {var dataPost = ''; request.on ('data', function (chunk) {dataPost + = chunk;}). on ('end', function () {var dataPostObject = querystring.parse (dataPost); console.log ('Användare skickad data: \ n', dataPost); response.end ('Du har skickat data: \ n'+ util.inspect (dataPostObject));});} if (request.method === "GET") {response.writeHead (200, {'Content-Type': 'text / html'}); response. end ( form);}}). lyssna (8082);För att göra allt så läsbart som möjligt har modulerna dessutom införlivats frågesträng Y Användbar, med dem kan vi bearbeta informationen som kommer från servern och därmed kunna manipulera den för att skriva ut den.
Låt oss se hur vårt formulär initialt ska se ut när vi startar vår applikation och öppnar webbläsaren vid projektets rotväg:
FÖRSTORA
Vi kommer nu att mata in några data i de textfält som vi ser i vårt formulär och klicka på skicka -knappen, detta kommer att visa oss en skärm med data som skickas och det kommer att skriva ut konsolen till oss. begär vanligt, det vill säga som det tas emot av vår ansökan:Vi har då sett att det har varit väldigt enkelt att bearbeta formulärdata, åtminstone att visa det igen.
Även om det föregående exemplet fungerar korrekt, har det vissa svagheter att om programmet skulle komma i produktion kan det orsaka huvudvärk, till exempel vad som händer om det skickar oss mer data än vår servers minne kan uppenbarligen hela strukturen skulle kollapsa. Om vi får data från POSTA tom, i det aktuella läget för vår applikation skulle det misslyckas och vi skulle få ett fel som skulle få vår tjänst att krascha och sluta fungera.
För att rätta till dessa defekter måste vi helt enkelt införliva några mycket enkla valideringar, först och främst kommer vi att införliva en variabel som hjälper oss att begränsa den mottagna informationen till maximalt 2 MBDetta kan ge oss en liten säkerhet att åtminstone med få användare kommer det inte att vara möjligt för systemet att krascha. Sedan kommer vi att utvärdera det så att vår begäran POSTA behandlas på HTTP -objekt som innehåller den kan inte vara tom, så vi ser till att det inte finns några direkta fel på vår server. Låt oss titta på koden ovan med lämpliga ändringar:
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 (funktion (begäran, 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 angivna uppgif.webpterna överstiger vår kapacitet');}}). on ('end', funktion () {if (! PostData) {response.end (); return;} var ObjectPostData = querystring.parse (PostData); console.log ('Användaren skickade data: \ n', PostData); response.end ( 'Du har skickat data: \ n' + util.inspect (datosPostObjeto));});} if (request.method === "GET") {response.writeHead (200, {'Content-Type': ' text / html '}); response.end (form);}}). lyssna (8082);Om vi får data som är större än 2 MB skriver vi helt enkelt en rubrik HTTP 413 för att ange fallet och vi förstör omedelbart de mottagna uppgif.webpterna för att inte behålla belastningen på vår server i onödan.
Om vi får tomma data från POSTA, vi fortsätter helt enkelt vårt utförande och förhindrar att tjänsten dör oväntat.
En annan användning som vi kan ge till metoden POSTA av HTTP är för att kunna ta emot filer, för detta måste vi installera ett komplement i vårt system och det är det formidabla paketet för att uppnå detta mål i konsolen Node.js vi kommer att köra följande kod:
npm installera [email protected]Detta bör vara följande:
Nästa akt kommer vi att ändra vår form.html med följande kod:
I grund och botten vad vi gjorde var att ändra rubriken på formuläret så att vår server vet att den kommer att ta emot något mer än bara text, och vi har också ändrat textfälten till filer. Slutligen kommer vi att ändra vår fil server.js och vi kommer att placera följande kod:
var http = require ('http'); var formidable = require ('formidable'); var form = require ('fs'). readFileSync ('form.html'); http.createServer (funktion (begäran, 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 (filnamn + 'mottaget \ n');}). on ('end', function () {response.end ('Alla filer mottogs');}); inkommande.parse (begäran);} if (request.method === "GET") {response.writeHead (200, {'Content-Type': 'text / html'}); response.end (form);} }). lyssna (8082);Vi ser hur modulen formidabel är den som hjälper oss att bearbeta uppladdning av filer, detta kommer att lagra dem i en mapp som heter uppgif.webpter, som för att målmappen ska fungera måste ha skrivbehörighet till Node.js.
Med det sista har vi avslutat vår handledning, eftersom vi såg att vi har flera alternativ som vi kan behandla förfrågningarna med POSTA använder objektet HTTP på vår server Node.js, förutom alla fördelar som det tillför vår utveckling.