Wat doet body-parser met express?

Ik begrijp niet waarom we body-parsernodig hebben in een Express-toepassing, omdat we gegevens kunnen krijgen zonder body-parserte gebruiken.
En wat doet het eigenlijk en hoe?


Antwoord 1, autoriteit 100%

Om HTTP POST-verzoeken in Express.jsversie 4 en hoger af te handelen, moet u de middleware-module met de naam body-parserinstalleren.

body-parserextraheert het volledige lichaamsgedeelte van een inkomende verzoekstroom en geeft deze weer op req.body.

De middleware was eerder een onderdeel van Express.js, maar nu moet je het apart installeren.

Deze body-parser-module parseert de JSON-, buffer-, tekenreeks- en URL-gecodeerde gegevens die zijn ingediend met behulp van het HTTP POST-verzoek. Installeer body-parsermet NPM zoals hieronder weergegeven.

npm install body-parser --save

bewerken in 2019-april-2:
in [email protected] de body-parser middleware gebundeld met express. zie dit voor meer informatie


Antwoord 2, autoriteit 34%

Ja, we kunnen werken zonder body-parser. Wanneer u dat niet gebruikt, krijgt u het onbewerkte verzoek en uw hoofdtekst en kopteksten bevinden zich niet in het hoofdobject van verzoekparameter . U moet alle velden afzonderlijk manipuleren.

Of je kunt body-parsergebruiken, aangezien het express-team het onderhoudt.

Wat body-parser voor u kan doen: het vereenvoudigt het verzoek.
Hoe het te gebruiken: Hier is een voorbeeld:

Installeer npm install body-parser --save

Zo gebruik je body-parser in express:

const express = require('express'),
      app = express(),
      bodyParser = require('body-parser');
// support parsing of application/json type post data
app.use(bodyParser.json());
//support parsing of application/x-www-form-urlencoded post data
app.use(bodyParser.urlencoded({ extended: true }));

Link.

https://github.com/expressjs/body-parser.

En dan kun je body en headers krijgen in root request object . Voorbeeld

app.post("/posturl",function(req,res,next){
    console.log(req.body);
    res.send("response");
})

Antwoord 3, autoriteit 21%

Het antwoord hierleg het heel gedetailleerd en briljant uit, het antwoord bevat:

Kortom; body-parserextraheert het volledige body-gedeelte van een inkomende verzoekstroom en stelt deze beschikbaar op req.bodyals iets dat gemakkelijker te gebruiken is. Je hebt het niet per se nodig, want dat zou je allemaal zelf kunnen doen. Het zal echter hoogstwaarschijnlijk doen wat u wilt en u de moeite besparen.


Om wat dieper in te gaan; body-parser geeft je een middleware die nodejs/zlibgebruikt om de inkomende verzoekgegevens uit te pakken als deze zijn gezipt en stream-utils/raw-bodyom te wachten op de volledige, onbewerkte inhoud van de hoofdtekst van het verzoek voordat u het “parseert” (dit betekent dat als u de hoofdtekst van het verzoek niet zou gebruiken, u gewoon wat tijd verspilde).

Nadat de onbewerkte inhoud is verkregen, zal body-parser deze ontleden met behulp van een van de vier strategieën, afhankelijk van de specifieke middleware die u hebt besloten te gebruiken:

  • bodyParser.raw(): Parseert het lichaam niet echt , maar onthult gewoon de gebufferde inhoud van eerder in een Bufferop req.body.

  • bodyParser.text(): leest de buffer als platte tekst en onthult de resulterende string op req.body.

  • bodyParser.urlencoded(): ontleedt de tekst als URL-gecodeerde gegevens (dat is hoe browsers de neiging hebben om formuliergegevens te verzenden van reguliere formulieren die zijn ingesteld op POST) en het resulterende object (met de sleutels en waarden) blootstelt op req.body. Ter vergelijking; in PHP wordt dit allemaal automatisch gedaan en weergegeven in $_POST.

  • bodyParser.json(): parseert de tekst als JSON en onthult het resulterende object op req.body.

Pas nadat de req.bodyop de gewenste inhoud is ingesteld, wordt de volgende middleware in de stapel aangeroepen, die vervolgens toegang heeft tot de verzoekgegevens zonder na te hoeven denken over hoe deze moet worden uitgepakt en geparseerd.

Je kunt verwijzen naar body-parsergithubom hun documentatie, het bevat informatie over de werking ervan.


Antwoord 4, autoriteit 20%

Laten we proberen dit minst technisch te houden.

Stel dat u een html-formuliergegevens naar de node-js-server verzendt, d.w.z. dat u een verzoek aan de server hebt gedaan. Het serverbestand zou uw verzoek ontvangen onder een verzoekobject. Logischerwijs, als je dit verzoekobject in je serverbestand logt, zou je je formuliergegevens ergens in moeten zien, die dan kunnen worden geëxtraheerd, maar whoa! eigenlijk niet!

Dus, waar zijn onze gegevens? Hoe zullen we het extraheren als het niet alleen in mijn verzoek aanwezig is.

Een eenvoudige verklaring hiervoor is dat http uw formuliergegevens in stukjes en beetjes verzendt die bedoeld zijn om in elkaar gezet te worden zodra ze hun bestemming bereiken. Dus hoe zou u uw gegevens extraheren.

Maar waarom zou u de moeite nemen om uw gegevens elke keer handmatig op stukjes te analyseren en samen te voegen? Gebruik iets dat “body-parser” wordt genoemd en dit voor u zou doen.

body-parser ontleedt uw verzoek en converteert het naar een indeling waaruit u gemakkelijk relevante informatie kunt extraheren die u mogelijk nodig heeft.

Stel dat je bijvoorbeeld een aanmeldingsformulier op je frontend hebt staan. Je vult het in en vraagt de server om de details ergens op te slaan.

Gebruikersnaam en wachtwoord uit uw verzoek halen gaat zo eenvoudig als hieronder als u body-parser gebruikt.

var loginDetails = {    
    username : request.body.username,    
    password : request.body.password    
};

Dus in feite heeft body-parser uw binnenkomende verzoek geparseerd, de chunks met uw formuliergegevens samengesteld, vervolgens dit body-object voor u gemaakt en gevuld met uw formuliergegevens.


Antwoord 5, autoriteit 5%

Om toegang te krijgen tot de postgegevens moeten we body-parsergebruiken. Wat in feite de body-parseris waarmee express de body kan lezen en deze vervolgens kan ontleden in een Json-object dat we kunnen begrijpen.


Antwoord 6, autoriteit 3%

Het parseert de hoofdtekst van het HTTP-verzoek. Dit is meestal nodig wanneer u meer wilt weten dan alleen de URL die u aanraakt, met name in de context van een POST- of PUT PATCH HTTP-verzoek waarbij de gewenste informatie in de body staat.

Het is in feite een middleware voor het parseren van JSON, platte tekst of het retourneren van een onbewerkt Buffer-object dat u naar behoefte kunt afhandelen.


Antwoord 7, autoriteit 3%

Informatie over verzoeken

Bij het ontvangen van een POST- of PUT-verzoek, kan de hoofdtekst van het verzoek zijn:
belangrijk voor uw aanvraag. Bij de lichaamsgegevens komen is een beetje
meer betrokken dan het openen van aanvraagheaders. Het verzoekobject
die wordt doorgegeven aan een handler, implementeert de ReadableStream-interface.
Deze stream kan net als elke andere worden beluisterd of elders worden doorgesluisd
stroom. We kunnen de gegevens rechtstreeks uit de stream halen door te luisteren naar
de gebeurtenissen ‘data’ en ‘end’ van de stream.

Het stuk dat in elke ‘data’-gebeurtenis wordt uitgezonden, is een buffer. Als je weet dat het is
gegevens worden strings, het beste is om de gegevens te verzamelen in
een array, voeg het dan aan het ‘einde’ samen en verstrengel het.

let body = [];
request.on('data', (chunk) => {
  body.push(chunk);
}).on('end', () => {
  body = Buffer.concat(body).toString();
  // at this point, `body` has the entire request body stored in it as a string
});

Body-parser begrijpen

Volgens de documentatie

Ontdek binnenkomende verzoeken in een middleware voor uw handlers,
beschikbaar onder de eigenschap req.body.

Zoals je in het eerste voorbeeld hebt gezien, moesten we de inkomende verzoekstroom handmatig ontleden om de hoofdtekst te extraheren. Dit wordt een beetje vervelend als er meerdere formuliergegevens van verschillende typen zijn. Dus gebruiken we het body-parser-pakket dat al deze taak onder de motorkap doet.

Het biedt vier modules om verschillende soorten gegevens te ontleden

Nadat de body-parser de onbewerkte inhoud heeft gebruikt, gebruikt hij een van de bovenstaande strategieën (afhankelijk van de middleware die u hebt besloten te gebruiken) om de gegevens te ontleden. U kunt meer over hen lezen door hun documentatie te lezen.

Na het instellen van req.bodyop de geparseerde body, zal body-parser next()aanroepen om de volgende middleware op de stapel aan te roepen, die dan toegang heeft tot de gegevens opvragen zonder na te hoeven denken over hoe ze moeten worden uitgepakt en geparseerd.


Antwoord 8, autoriteit 3%

Dit is allemaal een kwestie van gemak.

Kortom, als de vraag was ‘Moeten we nodigbody-parsergebruiken?’ Het antwoord is nee’. We kunnen dezelfde informatie uit de client-post-request halen via een meer omslachtige route die over het algemeen minder flexibel zal zijn en de hoeveelheid code die we moeten schrijven om dezelfde informatie te krijgen, zal vergroten.

Dit is een soort van hetzelfde als het vragen ‘Do we nodig om expresste gebruiken om mee te beginnen?’ Nogmaals, het antwoord is er geen nee, en nogmaals, het komt er echt helemaal neer op het redden van ons het gedoe van het schrijven van meer code om de basisdingen te doen die express wordt geleverd met ‘ingebouwde’.

Op het oppervlak – body-parsermaakt het gemakkelijker om te krijgen bij de informatie in klantverzoeken in verschillende indelingen in plaats van u vangt u de onbewerkte gegevensstromen vast te leggen en uit te zoeken welke informatie de informatie is is in, veel minder handmatig het parseren van die informatie in bruikbare gegevens.


9, Autoriteit 3%

Als u geen afzonderlijke NPM-pakket-pakket wilt gebruiken, heeft de laatste express (4.16+) ingebouwde body-parser middleware en kan deze worden gebruikt,

const app = express();
app.use(express.json({ limit: '100mb' }));

P.S. Niet alle functionaliteiten van het lichaamsplein zijn aanwezig in de Express. Raadpleeg documentatie voor volledig gebruik hier

Other episodes