Turinys
The HTTP modulis parašytose mūsų programose Node.js Jie padeda mums sukurti dalį funkcionalumo, kad mūsų serveriai atgytų, tačiau tai nėra išskirtinis šio modulio panaudojimas.Tikroji galia HTTP matomas, kai mes naudojame jūsų objektą įvairioms užklausoms apdoroti arba prašymas tai gali būti gaunama iš mūsų programos, todėl galime apdoroti duomenis, gautus iš POST per formas ar klientų prašymus POILSIS.
Mokymo reikalavimaiNorėdami atlikti šioje pamokoje siūlomus pratimus, turime turėti funkcinį diegimą Node.js mūsų sistemoje ir turi leidimus prie jos prieiti. Taip pat svarbu turėti galimybę pasiekti turtingo teksto redaktorių, kad būtų galima koduoti pavyzdžius, mes galime naudoti viską, kas mums atrodo patogu, tačiau dėl patogumo rekomenduojame Aukščiausias tekstas arba NotePad ++ kurie taip pat turi sintaksės priedų „JavaScript“ Y HTML.
Duomenų apdorojimas POST leidžia mums gauti duomenis iš formų, todėl galime tvarkyti duomenis, gautus iš vartotojų sąveikos su mūsų programomis, taip leidžiant įgyvendinti verslo logiką minėtiems duomenims apdoroti.
Tiesioginis duomenų apdorojimo būdas POST tai praeina HTTP objektas, tiesiogiai sąveikaujant su metodu createServer () taip pat galime nustatyti užklausos metodo tipą POST arba GET Ir netgi PUT Y IŠTRINTI.
Jei esame stebėtojai, matome, kad tai verčia mus tam tikru būdu galvoti apie savo programas RESTING, tai yra, mes galime su juo bendrauti per skirtingus klientus ir nebūtinai su formomis HTMLTačiau tai yra tema, kuri neapsiriboja šia pamoka.
Pirmas dalykas, kurį mes padarysime, yra sukurti nedidelę formą, kuri leis mums užfiksuoti savo programos duomenis naršyklėje, todėl mes sukursime failą pavadinimu form.html mūsų programos kataloge ar aplanke.
Pastarasis nerekomenduojamas gamybos aplinkoje, todėl mes jį laikysime tik kaip nuorodą, kad galėtume parodyti, kaip sistema veikia. HTTP objektas. Mūsų formos kodas bus toks:
Kaip matome, mes tiesiog nurodome savo formai, kad ji turi naudoti šį metodą POST, turime keletą teksto laukų ir galiausiai mygtuką Pateikti siųsti mūsų duomenis į serverį.
Dabar turime sukurti serverį Node.js tai padės mums rinkti duomenis iš formos, čia turime atsižvelgti į dvi galimybes, pirma, kai pasiekiame savo programos kelią, tai bus metodas GET ir čia turėtume parodyti savo formą.
Antroji galimybė yra tada, kai siunčiami formos duomenys, ir tam mes turime patvirtinti metodą POST koks yra pratimo tikslas. Kad galėtume rodyti formą, turime sukurti sinchroninį komponentą, kuris nuskaito mūsų failą form.html ir patiekite jį atitinkamu maršrutu, todėl galime pasikliauti metodu readFileSync iš modulio fs.
Kitoje dalyje turime užtikrinti, kad mūsų serveris galėtų tvarkyti duomenis POST, tam mes tiesiog parodysime, ką gauname konsolėje naudodami šį metodą console.log (), tokiu būdu galime patvirtinti, kad viskas veikia tinkamai, pažiūrėkime pradinį kodą, kad pasiektume tai, ko norime:
var http = reikalauti ('http'); var querystring = reikalauti ('querystring'); var util = reikalauti ('util'); var form = reikalauti ('fs'). readFileSync ('form.html'); http .createServer (funkcija (užklausa, atsakymas) {if (request.method === "POST") {var dataPost = ''; request.on ('data', function (chunk) {dataPost + = chunk;}). on ('end', function () {var dataPostObject = querystring.parse (dataPost); console.log ('Vartotojas atsiuntė duomenis: \ n', dataPost); response.end ('Jūs išsiuntėte duomenis: \ n'+ util.inspect (dataPostObject));});} if (request.method === "GET") {response.writeHead (200, {'Content-Type': 'text / html'}); response. end ( forma);}}). klausykitės (8082);Kad viskas būtų kuo geriau įskaitoma, moduliai buvo papildomai įtraukti užklausos eilutė Y Naudinga, su jais mes galime apdoroti iš serverio gaunamą informaciją ir taip sugebėti ja manipuliuoti, kad ją išspausdintume.
Pažiūrėkime, kaip iš pradžių turėtų atrodyti mūsų forma, kai paleidžiame programą ir atidarome naršyklę pagrindiniame projekto kelyje:
DIDELIS
Dabar ketiname įvesti tam tikrus duomenis į tekstinius laukus, kuriuos matome savo formoje, ir spustelėti mygtuką „Siųsti“. Tai parodys mums ekraną su išsiųstais duomenimis ir mums atspausdins konsolę. prašyti paprasto, tai yra, kaip tai gaunama mūsų paraiškoje:Tada matėme, kad buvo labai lengva apdoroti formos duomenis, bent jau juos vėl parodyti.
Nors ankstesnis pavyzdys veikia tinkamai, jame yra tam tikrų trūkumų, kad jei programa būtų pradėta gaminti, tai mums galėtų sukelti didesnį galvos skausmą, pavyzdžiui, kas atsitiks, jei ji atsiųs mums daugiau duomenų, nei gali išlaikyti mūsų serverio atmintis, akivaizdu visa konstrukcija sugriūtų. Jei gauname duomenis iš POST tuščia, esant dabartinei mūsų programos būklei, ji nepavyks ir gausime klaidą, dėl kurios mūsų paslauga nutrūks ir nebeveiks.
Norėdami ištaisyti šiuos defektus, mes tiesiog turime įtraukti keletą labai paprastų patvirtinimų, visų pirma ketiname įtraukti kintamąjį, kuris padės mums apriboti gautus duomenis iki didžiausios 2 MBTai gali suteikti mums šiek tiek saugumo, kad bent jau su keliais vartotojais sistema negalės sugesti. Tada mes tai įvertinsime taip, kad mūsų prašymas POST būti apdorotas HTTP objektas joje esantis laukas negali būti tuščias, todėl užtikriname, kad mūsų serveryje nebūtų tiesioginių gedimų. Pažvelkime į aukščiau esantį kodą su atitinkamais pakeitimais:
var http = reikalauti ('http'); var querystring = reikalauti ('querystring'); var util = reikalauti ('util'); var form = reikalauti ('fs'). readFileSync ('form.html'); var maxData = 2 * 1024 * 1024; http.createServer (funkcija (užklausa, atsakymas) {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 („ Įvesti duomenys viršija mūsų galimybes ");}}). on ('end', function () {if (! PostData) {response.end (); return;} var ObjectPostData = querystring.parse (PostData); console.log ('Vartotojas atsiuntė duomenis: \ n', PostData); response.end ( 'Jūs išsiuntėte duomenis: \ n' + util.inspect (datosPostObjeto));});} if (request.method === "GET") {response.writeHead (200, {'Content-Type': ' text / html '}); response.end (forma);}}). klausytis (8082);Jei gauname daugiau nei 2 MB duomenų, mes tiesiog parašome antraštę HTTP 413 nurodyti atvejį ir nedelsdami sunaikiname gautus duomenis, kad be reikalo nelaikytume apkrovos mūsų serveryje.
Tuo atveju, kai gauname tuščių duomenų iš POST, mes tiesiog tęsiame vykdymą, neleisdami paslaugai netikėtai mirti.
Kitas šio metodo panaudojimas POST apie HTTP kad galėtume gauti failus, tam mes turime įdiegti papildymą savo sistemoje ir tai yra didžiulis paketas, kad konsolėje pasiektume šį tikslą Node.js mes vykdysime šį kodą:
npm įdiegti [email protected]Tai turėtų būti taip:
Kitas veiksmas, kurį ketiname pakeisti form.html su šiuo kodu:
Iš esmės mes padarėme formos antraštę, kad mūsų serveris žinotų, jog gaus ką nors daugiau nei tik tekstą, o mes taip pat pakeitėme teksto laukus į failus. Galiausiai pakeisime savo failą server.js ir mes įdėsime šį kodą:
var http = reikalauti ('http'); var formidable = reikalauti ('formidable'); var form = reikalauti ('fs'). readFileSync ('form.html'); http.createServer (funkcija (prašymas, atsakymas) { if (request.method === "POST") {var gaunamas = naujas formidable.IncomingForm (); gaunamas. uploadDir = 'failai'; .size) {return;} response.write (failo pavadinimas + 'gautas \ n');}). on ('end', function () {response.end ('Visi failai buvo gauti');}); gaunamas.parse (užklausa);} if (request.method === "GET") {response.writeHead (200, {'Content-Type': 'text / html'}); response.end (forma);} }). klausyk (8082);Mes matome, kaip modulis baisus yra tas, kuris padeda mums apdoroti failų įkėlimą, tai juos išsaugos aplanke pavadinimu įrašai, kad paskirties aplankas veiktų, turi turėti rašymo teisę Node.js.
Paskutinį kartą baigėme vadovėlį, nes matėme, kad turime daug galimybių, kuriomis galime apdoroti užklausas POST naudojant objektą HTTP mūsų serveryje Node.js, be visų privalumų, kuriuos jis prideda prie mūsų pokyčių.