SuperAgent ist eine leichte progressive Ajax-API mit Flexibilität, Lesbarkeit und geringer Lernkurve. Es funktioniert auch mit Node.js!
request .post('/api/pet') .send({ Name: 'Manny', Species: 'cat' }) .set('X-API-Key', 'foobar') .set('Accept', 'application/json') .then(res => { Alert('yay got ' + JSON.stringify(res.body)); });
Testdokument
Englisch
die folgendeTestdokumentwird eingesetztMokkaDer „Dokumentations“-Reporter generiert die Testsuite und spiegelt sie direkt wider. Dies stellt eine zusätzliche Dokumentationsquelle dar.
Grundanforderung
kann per Anruf erreicht werdenAnfrage
Geeignete Methode für das Objekt, um die Anforderung zu stellen, und dann aufrufen.Dann()
( oder.Ende()
odererwarten)Anfrage senden. Zum Beispiel ein einfachesERHALTENfragen:
request .get('/search') .then(res => { // res.body, res.headers, res.status }) .catch(err => { // err.message, err.response });
HTTP-Methoden können auch als Strings übergeben werden:
Anmerkung des Übersetzers: Groß- und Kleinschreibung sind zulässig.
request('GET', '/search').then(success, failed);
Rückrufe im alten Stil werden ebenfalls unterstützt, sind jedoch veraltet. Du kannst anrufen.Ende()
ersetzen .Dann()
::
request('GET', '/search').end(function(err, res){ if (res.ok) {}});
Es können absolute URLs verwendet werden. In Webbrowsern werden absolute URLs nur auf dem Server implementiertCORSnur gültig.
request .get('https://example.com/search') .then(res => { });
KnotenKundenbetreuung zuUnix-Domänen-SocketsEine Anfrage stellen:
// Muster: https?+unix://SOCKET_PATH/REQUEST_PATH// „%2F“ im Socket-Pfad als „/“ verwenden try { const res = waiting request .get('http+unix://% 2Fabsolute%2Fpath% 2Fto%2Funix.sock/search'); // res.body, res.headers, res.status} Catch(err) { // err.message, err.response}
DELETE__、__HEAD__、__PATCH__、__POSTUndSETZENAnfragen funktionieren auch, ändern Sie einfach den Methodennamen:
request .head('/favicon.ico') .then(res => { });
LÖSCHENkann auch benutzt werden.des()
Aus Gründen der Kompatibilität mit älteren IE-Versionen aufgerufen, wolöschen
ist ein reserviertes Wort.
Die HTTP-Methode ist standardmäßig __GET__, daher ist der folgende Code gültig, wenn Sie dies bevorzugen:
request('/search', (err, res) => { });
Verwenden Sie HTTP/2
Um das HTTP/2-Protokoll (ohne HTTP/1.x-Fallback) zu verwenden, verwenden Sie.http2()
Methode.
const request = require('superagent'); const res = auf Anfrage warten .get('https://example.com/h2') .http2();
Legen Sie Anforderungsheaderfelder fest
Das Festlegen von Anforderungsheaderfeldern ist einfach: Rufen Sie an.Satz()
Bei der Übergabe von Feldnamen und -werten:
request .get('/search') .set('API-Key', 'foobar') .set('Accept', 'application/json') .then(callback);
Sie können auch ein Objekt übergeben, um mehrere Felder in einem Aufruf festzulegen:
request .get('/search') .set({ 'API-Key': 'foobar', Accept: 'application/json' }) .then(callback);
ERHALTEN
fragen
.Anfrage()
Methode akzeptiert ein Objekt und bei Verwendung mitERHALTENMethoden bilden zusammen eine Abfragezeichenfolge. Im Folgenden wird der Pfad generiert/search?query=Manny&range=1..5&order=desc
. Anmerkung des Übersetzers:.Anfrage()
Die Parameter der Methode müssen nicht vorab url-kodiert werden.
request .get('/search') .query({ query: 'Manny' }) .query({ range: '1..5' }) .query({ order: 'desc' }) .then(res = > { });
oder ein einzelnes Objekt übergeben:
request .get('/search') .query({ query: 'Manny', range: '1..5', order: 'desc' }) .then(res => { });
.Anfrage()
Methoden können auch Zeichenfolgen akzeptieren.
request .get('/querystring') .query('search=Manny&range=1..5') .then(res => { });
Oder schließen Sie sich ihnen einzeln an:
request .get('/querystring') .query('search=Manny') .query('range=1..5') .then(res => { });
KOPF
fragen
Sie können auch hinzufügenKOPFAnfragen verwenden die Methode .query(). Im Folgenden wird der Pfad generiert/users?email=joe@smith.com
。
request .head('/users') .query({ email: 'joe@smith.com' }) .then(res => { });
POST
/SETZEN
fragen
Ein typisches JSONPOSTEine Anfrage könnte so aussehen, wobei wir das entsprechend festlegenInhaltstyp
Header-Felder und „schreiben“ einige Daten, in diesem Fall nur eine JSON-Zeichenfolge.
request.post('/user') .set('Content-Type', 'application/json') .send('{"name": "tj", "pet": "tobi"}') .then( Rückruf) .catch(errorCallback)
Da JSON zweifellos am häufigsten vorkommt, ist dies der FallStandardvon! Das folgende Beispiel entspricht dem vorherigen Beispiel.
request.post('/user') .send({ name: 'tj', pet: 'tobi' }) .then(callback, errorCallback)
oder mehrere anrufen.schicken()
::
request.post('/user') .send({ name: 'tj' }) .send({ pet: 'tobi' }) .then(callback, errorCallback)
Standardmäßig wird eine Zeichenfolge gesendetInhaltstyp
Festlegen alsapplication/x-www-form-urlencoded
, werden mehrere Anrufe mit getätigt&
Verbindung, hier generiertname=tj&pet=tobi
::
request.post('/user') .send('name=tj') .send('pet=tobi') .then(callback, errorCallback);
Das SuperAgent-Format ist erweiterbar, unterstützt jedoch standardmäßig „json“ und „form“. um die Daten zu übergeben alsapplication/x-www-form-urlencoded
Zum Versenden genügt ein Anruf.Typ()
„form“ wird übergeben, der Standardwert ist „json“. DasPOSTDer Anfragetext lautet „name=tj&pet=tobi“.
request.post('/user') .type('form') .send({ name: 'tj' }) .send({ pet: 'tobi' }) .then(callback, errorCallback)
Unterstützt auch das SendenFormulardaten
Objekt. Das folgende Beispiel wirdPOSTFordern Sie den Inhalt des durch id="myForm" identifizierten HTML-Formulars an:
request.post('/user') .send(new FormData(document.getElementById('myForm'))) .then(callback, errorCallback)
aufstellenInhaltstyp
Die offensichtliche Lösung ist die Verwendung.Satz()
Methode:
request.post('/user') .set('Content-Type', 'application/json')
.Typ()
Die Methode ist auch als Kurzschrift verfügbar und akzeptiert die Kanonisierung mit Typ/SubtypMime TypName oder nur die Erweiterung, z. B. „xml“, „json“, „png“ usw.:
request.post('/user') .type('application/json') request.post('/user') .type('json') request.post('/user') .type('png')
Serialisieren Sie den Anforderungstext
SuperAgent serialisiert JSON und Formulare automatisch. Sie können die automatische Serialisierung auch für andere Typen einrichten:
request.serialize['application/xml'] = function (obj) { return 'string generic from obj';};// Als nächstes werden alle Anfragen mit dem Inhaltstyp „application/xml“ automatisch serialisiert
Wenn Sie den Datenkörper (Nutzlast) in einem benutzerdefinierten Format senden möchten, können Sie den integrierten Serialisierer auf Anfragebasis durch ersetzen.serialize()
Methode:
request .post('/user') .send({foo: 'bar'}) .serialize(obj => { return 'string generic from obj'; });
Wiederholungsanforderung
Wenn die Anfrage vorübergehend fehlschlägt oder möglicherweise aufgrund einer instabilen Netzwerkverbindung und wenn gegeben.wiederholen()
Methode wiederholt SuperAgent die Anfrage automatisch.
Diese Methode verfügt über zwei optionale Parameter: die Anzahl der Wiederholungsversuche (standardmäßig).1
) und eine Callback-Funktion. Es ruft vor jedem Wiederholungsversuch callback(err, res) auf. Rückruf kann zurückkommenWAHR
/FALSCH
um zu steuern, ob die Anfrage wiederholt werden soll (es sollte jedoch immer die maximale Anzahl von Wiederholungen verwendet werden). request.get('https://example.com/search') .retry(2) // oder: .retry(2, callback) // entweder .then(finished); .catch(failed);
.wiederholen()
nur verwenden füridempotentAnfragen (d. h. mehrere Anfragen, die den Server erreichen, ohne unerwünschte Nebenwirkungen wie Doppelkäufe).
Standardmäßig werden alle Anforderungsmethoden ausprobiert (das heißt, Sie müssen eine benutzerdefinierte Wiederholungsrückruffunktion übergeben, wenn Sie nicht möchten, dass POST-Anfragen erneut versucht werden).
Die folgenden Statuscodes werden standardmäßig wiederholt:
408
413
429
500
502
503
504
521
522
524
Die folgenden Fehlercodes werden standardmäßig wiederholt:
'ETIMEDOUT'
'ECONNRESET'
'EADDRINUS'
'ECONNREFUSED'
'EPIPE'
'ENOTFOUND'
'ENETUNREACH'
'EAI_AGAIN'
Legen Sie „Akzeptieren“ fest
Und.Typ()
Die Methode ist ähnlich und Sie können auch die Kurzschriftmethode verwenden.akzeptieren()
aufstellenAkzeptieren
Anforderungsheader. Der Einfachheit halber wird auch zitiertrequest.types
, sodass Sie das Ganze normalisieren könnenMime TypName angegeben alsTyp/Subtyp
, oder geben Sie die erweiterte Suffixform als „xml“, „json“, „png“ usw. an:
request.get('/user') .accept('application/json') request.get('/user') .accept('json') request.post('/user') .accept('png')
Facebook und JSON akzeptieren
Wenn Sie die API von Facebook aufrufen, senden Sie unbedingt dieAkzeptieren: application/json
Anforderungsheader. Wenn Sie dies nicht tun, wird Facebook antwortenInhaltstyp: Text/Javascript; Zeichensatz=UTF-8
, SuperAgent wird also nicht analysierenres.körper
wird undefiniert sein. du kannst es benutzenreq.accept('json')
oderreq.header('Accept', 'application/json')
um dies zu tun. Weitere Informationen finden Sie unterHeft 1078。
Abfragezeichenfolgen
req.query(obj)
ist eine Methode, die zum Erstellen von Abfragezeichenfolgen verwendet werden kann. Zum Beispiel inPOSTZunahme?format=json&dest=/login
::
request .post('/') .query({ format: 'json' }) .query({ dest: '/login' }) .send({ post: 'data', hier: 'wahoo' }) .then (Ruf zurück);
Standardmäßig werden Abfragezeichenfolgen nicht in einer bestimmten Reihenfolge zusammengestellt. Kann benutzenreq.sortQuery()
Abfragezeichenfolge zur Aktivierung der ASCII-basierten Sortierung. Sie können auch verwendenreq.sortQuery(myComparisonFn)
Bietet benutzerdefinierte Sortiervergleichsfunktionen. Die Vergleichsfunktion sollte zwei Argumente akzeptieren und eine negative/null/positive Ganzzahl zurückgeben.
// Standardreihenfolge request.get('/user') .query('name=Nick') .query('search=Manny') .sortQuery() .then(callback) // Benutzerdefinierte Sortierfunktion request.get( ' /user') .query('name=Nick') .query('search=Manny') .sortQuery((a, b) => a.length - b.length) .then(callback)
TLS-Optionen
In Node.js unterstützt SuperAgent Methoden zum Konfigurieren von HTTPS-Anfragen:
.ca()
: Stellen Sie das CA-Zertifikat als vertrauenswürdig ein.cert()
: Client-Zertifikatkette festlegen.Taste()
: Privatschlüssel des Clients festlegen.pfx()
: Legen Sie den PFX- oder PKCS12-codierten privaten Schlüssel und die Zertifikatskette des Clients fest.disableTLSCerts()
: Abgelaufene oder ungültige TLS-Zertifikate nicht ablehnen. intern eingestelltRejectUnauthorized=true
。Beachten Sie, dass diese Methode Man-in-the-Middle-Angriffe ermöglicht.
Weitere Informationen finden Sie unter Node.jshttps.Request-Dokumentation。
var key = fs.readFileSync('key.pem'), cert = fs.readFileSync('cert.pem');request .post('/client-auth') .key(key) .cert(cert) .then (Ruf zurück);
var ca = fs.readFileSync('ca.cert.pem');request .post('https://localhost/private-ca-server') .ca(ca) .then(res => {});
Analysieren des Antworttextes
SuperAgent analysiert für Sie bekannte Antworttextdaten, was derzeit unterstützt wirdapplication/x-www-form-urlencoded
,application/json
,ebenso gut wieMultipart-/Formulardaten
. Sie können die automatische Analyse anderer Antworttextdaten einrichten:
//Browser request.parse['application/xml'] = function (str) { return {'object': 'parsed from str'};};//noderequest.parse['application/xml'] = function (res , cb) { // Antworttext analysieren und res.body hier festlegen cb(null, res); }; // Als nächstes werden Antworten vom Typ „application/xml“ automatisch analysiert
du kannst es benutzen.buffer(true).parse(fn)
Methode zum Festlegen eines benutzerdefinierten Parsers (anstelle der integrierten Parser). Wenn die Antwortpufferung nicht aktiviert ist (.buffer(false)
), wird es ausgelöstAntwort
Ereignis, ohne auf den Abschluss des Body-Parsers zu warten, alsoAntwortkörper
wird nicht verfügbar sein.
JSON / Urlencodiert
Attributeres.körper
ist das analysierte Objekt, z. B. wenn die Anfrage mit der JSON-Zeichenfolge „{“user“:{“name“: „tobi“}}“ geantwortet hatres.body.user.name
wird „tobi“ sein. Ebenso führt ein x-www-form-urlencoded-Wert von „user[name]=tobi“ zum gleichen Ergebnis. Es wird nur eine Verschachtelungsebene unterstützt. Wenn Sie komplexere Daten benötigen, senden Sie bitte stattdessen JSON.
Senden Sie ein Array mit wiederholten Schlüsseln..send({color: ['red','blue']})
werde sendenFarbe=Rot&Farbe=Blau
. Wenn Sie möchten, dass die Namen der Array-Schlüssel enthalten sind[]
, müssen Sie es selbst hinzufügen, da SuperAgent es nicht automatisch hinzufügt.
Mehrteilig
Knoten-Client überBeeindruckendDas Modul unterstützt _multipart/form-data_. Beim Parsen einer mehrteiligen Antwort das Objektres.files
steht Ihnen ebenfalls zur Verfügung. Angenommen, eine Anfrage antwortet mit dem folgenden mehrteiligen Anfragetext:
--whoopContent-Disposition: Anhang; name="Bild"; filename="tobi.png"Content-Type: image/png... Daten hier ...--whoopContent-Disposition: form-data; name="name"Content-Type: text/plainTobi--whoop--
res.body.name
wird den Wert „Tobi“ haben undres.files.image
Wird als dienenDatei
Objekt.
Binärdaten
In einem Browser können Sie verwenden.responseType('blob')
um die Verarbeitung binärer Antworttexte anzufordern. Diese API ist bei der Ausführung in node.js nicht erforderlich. Die unterstützten Parameterwerte für diese Methode sind
'Klecks'
Den XmlHTTPRequests zugewiesenAntworttyp
Attribute'Arraybuffer'
Dem Attribut „responseType“ von XmlHTTPRequest zugewiesen
req.get('/binary.data') .responseType('blob') .then(res => { // res.body wird der browsereigene Blob-Typ sein });
Weitere Informationen finden Sie im Mozilla Developer Networkxhr.responseType-Dokumentation。
Antworteigenschaften
existierenAntwort
Für das Objekt werden eine Reihe nützlicher Flags und Eigenschaften festgelegt, darunter Antworttext, analysierter Antworttext, Antwortheaderfelder, Statusflags und mehr.
Antworttext
res.text
Die Eigenschaft enthält eine nicht analysierte Antworttextzeichenfolge. Diese Eigenschaft ist in der Client-API immer vorhanden und nur standardmäßig, wenn der Mime-Typ des Knotens mit „text/“ übereinstimmt.„、“/json“ oder „x-www-form-urlencoded“. Der Grund besteht darin, Speicher zu sparen, da das Puffern von Text für große Textkörper (z. B. mehrteilige Dateien oder Bilder) äußerst ineffizient ist. Informationen zum Erzwingen des Pufferns finden Sie unter „Pufferantwort"Teil.
Antwortkörper
So wie SuperAgent Anforderungsdaten automatisch serialisieren kann, kann er auch den Antworttext automatisch analysieren. Es wird analysiert, wenn ein Resolver für einen Inhaltstyp definiert wird, der standardmäßig „application/json“ und „application/x-www-form-urlencoded“ enthält. Dann kannst du bestehenres.körper
Analysiertes Objekt abrufen.
Antwort-Header-Feld
res.header
Ein Objekt, das die geparsten Antwort-Header-Felder enthält, wobei die Feldnamen wie ein Knoten in Kleinbuchstaben geschrieben sind. Zum Beispielres.header['content-length']
。
Antwortinhaltstyp (Content-Type)
Der Content-Type-Antwortheader ist ein Sonderfallres.typ
, das keinen Zeichensatz hat (und einen haben kann). Beispiel: „text/html; charset=utf8“Inhaltstyp
wird „text/html“ bereitstellen alsres.typ
,Dannres.charset
Das Attribut enthält „utf8“.
Antwortstatus
Antwortstatus-Flags helfen zusammen mit anderen nützlichen Informationen festzustellen, ob die Anfrage erfolgreich war, wodurch SuperAgent ideal für die Interaktion mit RESTful-Webdiensten geeignet ist. Diese Flags sind derzeit definiert als:
Var-Typ = Status / 100 | 0; // Status / Klasse res.status = Status; res.statusType = Typ; // Grundlagen res.info = 1 == type; res.ok = 2 == Typ; res.clientError = 4 == type; res.serverError = 5 == type; res.error = 4 == Typ || 5 == Typ; // 语法糖 res.accepted = 202 == status; res.noContent = 204 == Status || 1223 == Status; res.badRequest = 400 == Status; res.unauthorized = 401 == Status; res.notAcceptable = 406 == Status; res.notFound = 404 == Status; res.forbidden = 403 == Status;
Abbruchanforderung
Um eine Anfrage abzubrechen, rufen Sie einfach anreq.abort()
Methode.
Timeout-Einstellung
Manchmal bleiben Netzwerke und Server „stecken“ und antworten nie, nachdem sie eine Anfrage angenommen haben. Legen Sie eine Zeitüberschreitung fest, um zu vermeiden, dass Anfragen ewig warten.
req.timeout({deadline:ms})
oderreq.timeout(ms)
(InMS
ist Millisekunden > 0) legt eine Frist für den Abschluss der gesamten Anfrage (einschließlich aller Uploads, Weiterleitungen, Serververarbeitungszeit) fest. Wenn die Antwort innerhalb dieser Zeit nicht vollständig heruntergeladen wird, wird die Anfrage abgebrochen.req.timeout({response:ms})
Legt die maximale Zeit fest, die auf das Eintreffen des ersten Bytes vom Server gewartet werden soll, begrenzt jedoch nicht die Dauer des gesamten Downloads. Das Antwort-Timeout sollte mindestens ein paar Sekunden länger sein als die Zeit, die der Server benötigt, um zu antworten, da es auch Zeit für DNS-Suchen, TCP/IP- und TLS-Verbindungen und das Hochladen der angeforderten Daten umfasst.
Sie sollten beide verwendenTermin
UndAntwort
Auszeit. Auf diese Weise können Sie ein kurzes Antwort-Timeout nutzen, um nicht reagierende Netzwerke schnell zu erkennen, und eine lange Cutoff-Zeit, um Zeit für Downloads in langsamen, aber zuverlässigen Netzwerken zu schaffen. Beachten Sie, dass beide Timer die zulässige Zeit begrenzenhochladenBindungszeit. Wenn Sie eine Datei hochladen, verwenden Sie eine lange Zeitüberschreitung.
request .get('/big-file?network=slow') .timeout({ Antwort: 5000, // 5 Sekunden warten, bis der Server mit dem Senden beginnt Frist: 60000, // aber 1 Minute warten, bis die Datei vollständig geladen ist . }) . then(res => { /* rechtzeitige Antwort */ }, err => { if (err.timeout) { /* timeout! */ } else { /* andere Fehler */ } });
Es liegt ein Timeout-Fehler vor.Auszeit
Attribute.
verifizieren
Verfügbar sowohl im Node als auch im Browser über.auth()
Methode zur Authentifizierung:
request .get('http://local') .auth('tobi', 'learnboost') .then(callback);
existierenKnotenIm Client kann die Basisauthentifizierung als „user:pass“ in die URL geschrieben werden:
request.get('http://tobi:learnboost@local').then(callback);
Standardmäßig ist nur dieBasic
Authentifizierung. In einem Browser können Sie hinzufügen{type:'auto'}
So aktivieren Sie alle im Browser integrierten Methoden (Digest, NTLM usw.):
request.auth('digest', 'secret', {type:'auto'})
Autor
Methode unterstützt auch aTrägertyp
, um die tokenbasierte Authentifizierung anzugeben:
request.auth('my_token', { type: 'bearer' })
Folgen Sie der Weiterleitung
Standardmäßig werden bis zu 5 Weiterleitungen verfolgt, Sie können diese jedoch verwendenres.redirects(n)
Methode, um es anzugeben:
const Antwort = Warten auf request.get('/some.png').redirects(2);
Weiterleitungen, die das Limit überschreiten, gelten als Fehler. verwenden.ok(res => res.status < 400)
Lesen Sie sie als Erfolgsantworten.
globaler Staatsagent
Cookies speichern
SuperAgent speichert standardmäßig keine Cookies in Node, Sie können sie jedoch verwenden.Agent()
Die Methode erstellt eine Kopie des SuperAgents, der das Cookie enthält. Jede Kopie verfügt über einen separaten Cookie-Speicher.
const agent = request.agent();agent .post('/login') .then(() => { return agent.get('/cookied-page'); });
In Browsern werden Cookies automatisch vom Browser verwaltet, also.Agent()
Cookies werden nicht getrennt.
Standardoptionen für mehrere Anfragen
Die normale Anforderungsmethode, die auf einem Agenten aufgerufen wird, wird als Standard für alle von diesem Agenten gestellten Anforderungen verwendet.
const agent = request.agent() .use(plugin) .auth(shared); waiting agent.get('/with-plugin-and-auth'); // mit Plugin und Authentifizierung wait agent.get(' /also -with-plugin-and-auth'); // auch mit Plugin und Authentifizierung
Die vollständige Liste der Methoden, die der Proxy zum Festlegen von Standardwerten verwenden kann, ist:verwenden
、An
、einmal
、Satz
、Anfrage
、Typ
、akzeptieren
、Autor
、withCredentials
、sortQuery
、wiederholen
、OK
、Weiterleitungen
、Auszeit
、Puffer
、serialisieren
、analysieren
、ca
、Taste
、pfx
、zert
.
Pipeline-Daten
Mit dem Node-Client können Sie Daten in und aus Anfragen weiterleiten. Beachten Sie, dass mit.Rohr()
ersetzen .end()/.then()
Methode.
Der Inhalt der Pipeline-Datei als Beispielanfrage:
const request = require('superagent');const fs = require('fs');const stream = fs.createReadStream('path/to/my.json');const req = request.post('/somewhere') ;req.type('json');stream.pipe(req);
Beachten Sie, dass beim Senden von Anforderungen über die Pipeline der Superagent verwendet wirdChunked-Transfer-KodierungSenden Sie weitergeleitete Daten, die nicht von allen Servern unterstützt werden (z. B. Python-WSGI-Server).
oder leiten Sie die Antwort an eine Datei weiter:
const stream = fs.createWriteStream('path/to/my.json');const req = request.get('/some.json');req.pipe(stream);
Sie können Pipes und Callback-Funktionen oder Promises nicht mischen. Beachten Sie, dass Siesollte nichtVersuchen Sie es mit Rohrleitungen.Ende()
oderAntwort
Objektergebnis:
// Tun Sie dies nicht: const stream = getAWritableStream(); const req = request .get('/some.json') // SCHLECHT: Dies leitet nutzlose Informationen in den Stream weiter und schlägt auf unerwartete Weise fehl .end((err , this_does_not_work) => this_does_not_work.pipe(stream)) const req = request .get('/some.json') .end() // BAD: Dies wird auch nicht unterstützt, Aufruf nach .end. Pipe. .pipe(nope_its_too_late);
im Superagentenzukünftige Versionrein, jaRohr()
Unsachgemäße Aufrufe von schlagen fehl.
mehrteilige Anfrage
SuperAgent eignet sich auch hervorragend fürBauenes bietet Methode.anfügen()
Und.Feld()
mehrteilige Anfragen für .
wenn Sie es verwenden.Feld()
oder.anfügen()
, können Sie das nicht verwenden.schicken()
Und dukann nichtaufstellenInhaltstyp
(stellt den richtigen Typ für Sie ein).
Zusätzliche Dokumente
Um Dateien zu senden, verwenden Sie.attach(Name, [Datei], [Optionen])
. Sie können dies tun, indem Sie mehrmals anrufen.anfügen
um mehrere Dateien anzuhängen. Die Parameter sind:
Name
— Formular Der Feldname im Formular.Datei
— eine Zeichenfolge mit einem Dateipfad oderBlob/Puffer
Objekt.Optionen
– (optional) eine Zeichenfolge für einen benutzerdefinierten Dateinamen oder{Dateiname: Zeichenfolge}
Objekt. Wird auch in Node unterstützt{contentType: 'mime/type'}
. Erstellen Sie einen Browser mit dem entsprechenden TypKlecks
。
request .post('/upload') .attach('image1', 'path/to/felix.jpeg') .attach('image2', imageBuffer, 'luna.jpeg') .field('caption', 'My.jpeg') cats') .then(callback);
Feldwert
Ähnlich wie Formularfelder in HTML können Sie diese verwenden.field(Name, Wert)
Und.field({name: value})
Legen Sie den Feldwert fest. Angenommen, Sie möchten einige Bilder mit Ihrem Namen und Ihrer E-Mail-Adresse hochladen. Ihre Anfrage könnte so aussehen:
request .post('/upload') .field('user[name]', 'Tobi') .field('user[email]', 'tobi@learnboost.com') .field('friends[]', ['loki', 'jane']) .attach('image', 'path/to/tobi.png') .then(callback);
Kompression
Der Node-Client unterstützt komprimierte Antworten und das Beste ist: Sie müssen nichts tun! Es funktioniert einfach.
Pufferantwort
Um zu erzwingen, dass der Antworttext als gepuffert wirdres.text
, Du kannst anrufenreq.buffer()
. Um die Standardpufferung von Textantworten (z. B. „text/plain“, „text/html“ usw.) aufzuheben, können Sie aufrufenreq.buffer(false)
。
wenn der Puffer zur Verfügung stehtres.gepuffert
Mit diesem Flag können Sie sowohl gepufferte als auch ungepufferte Antworten im selben Rückruf verarbeiten.
CORS
Aus Sicherheitsgründen blockieren Browser Cross-Origin-Anfragen, es sei denn, der Server entscheidet sich für die Verwendung von CORS-Headern. Der Browser gibt außerdem eine zusätzliche Meldung ausOPTIONENAnfrage, um zu prüfen, welche HTTP-Header und -Methoden vom Server zugelassen sind.Lesen Sie mehr über CORS。
.withCredentials()
Die Methode unterstützt das Senden von Cookies vom Ursprung, jedoch nur, wenn Access-Control-Allow-OriginNEINPlatzhalter ("*") undZugangskontrolle-Zulassen-Anmeldeinformationen
wenn „wahr“.
request .get('https://api.example.com:4001/') .withCredentials() .then(res => { Assert.equal(200, Res.Status); Assert.Equal('tobi', Res .text); })
Fehlerbehandlung
Ihrer Rückruffunktion werden immer zwei Parameter übergeben: Fehler und Antwort. Wenn keine Fehler auftreten, wird das erste Argument verwendetNull
::
request .post('/upload') .attach('image', 'path/to/tobi.png') .then(res => { });
Außerdem wird ein „Fehler“-Ereignis ausgelöst, auf das Sie warten können:
request .post('/upload') .attach('image', 'path/to/tobi.png') .on('error', handle) .then(res => { });
Bitte beachten Sie,Standardmäßig betrachtet Superagent 4xx- und 5xx-Antworten (und nicht behandelte 3xx-Antworten) als Fehler. Zum Beispiel, wenn Sie erhalten304 Nicht geändert
、403 Verboten
oder500 Interner Server
Bei der Fehlerantwort werden diese Statusinformationen durch den weitergeleitetFehlerstatus
liefern. Fehler aus solchen Antworten enthalten auch aFehlerantwort
Feld, das enthält „AntworteigenschaftenAlle in „erwähnten Eigenschaften“. Die Bibliothek funktioniert auf diese Weise, um den häufigen Fall zu behandeln, dass eine erfolgreiche Antwort erforderlich ist und ein HTTP-Fehlerstatuscode als Fehler behandelt wird, während dennoch benutzerdefinierte Logik für bestimmte Fehlerbedingungen möglich ist.
Netzwerkausfälle, Zeitüberschreitungen und andere nicht reagierende Fehler werden nicht berücksichtigtFehlerstatus
oderFehlerantwort
Feld.
Wenn Sie 404- oder andere HTTP-Fehlerantworten verarbeiten möchten, können Sie eine Abfrage durchführenFehlerstatus
Attribute. Wenn ein HTTP-Fehler (4xx- oder 5xx-Antwort) auftritt,Res.Fehler
Attribut ist einFehler
Objekt, mit dem Sie die folgenden Prüfungen durchführen können:
if (err && err.status === 404) { Alert('oh no ' + res.body.message);}else if (err) { // alle anderen Fehlertypen, die behandelt werden müssen}
Alternativ können Sie verwenden.ok(Rückruf)
Methode, um festzustellen, ob die Antwort ein Fehler ist.OK
Die Callback-Funktion der Funktion ruft die Antwort ab und gibt true zurück, wenn die Antwort als Erfolg interpretiert werden soll.
request.get('/404') .ok(res => res.status < 500) .then(response => { // 404-Seite als erfolgreiche Antwort abrufen })
Fortschrittsverfolgung
SuperAgent wird beim Hoch- und Herunterladen großer Dateien ausgelöstFortschritt
Fall.
request.post(url) .attach('field_name', file) .on('progress', event => { /* Ereigniswert: { Richtung: "Upload" oder "Download" Prozent: 0 bis 100 // wenn unbekannt Dateigröße, möglicherweise nicht total: // Gesamtdateigröße, möglicherweise nicht geladen: // Anzahl der bisher heruntergeladenen oder hochgeladenen Bytes} */ }) .then()
Testen Sie auf localhost
Erzwingen Sie Verbindungen zu bestimmten IP-Adressen
In Node.js können Sie die DNS-Auflösung ignorieren und verwenden.verbinden()
Die Methode leitet alle Anfragen an eine bestimmte IP-Adresse weiter. Diese Anfrage würde beispielsweise an „localhost“ gehenexample.com
::
const res = waiting request.get("http://example.com").connect("127.0.0.1");
Da Anfragen möglicherweise umgeleitet werden, können mehrere Hostnamen und mehrere IPs sowie ein spezielles angegeben werden*
Als Fallback (Hinweis: Es werden keine anderen Platzhalter unterstützt). Anfrage wird behaltenGastgeber
Der ursprüngliche Wert des Anforderungsheaders.
const res = waiting request.get("http://redir.example.com:555") .connect({ "redir.example.com": "127.0.0.1", // redir.example.com:555 wird Verwenden Sie 127.0.0.1:555 „www.example.com“: false, // überschreiben Sie dies nicht; verwenden Sie DNS normalerweise „mapped.example.com“: { host: „127.0.0.1“, port: 8080}, / /mapped .example.com:* will use 127.0.0.1:8080 "*": "proxy.example.com", // alle anderen Anfragen werden an diesen Host gesendet});
Ignorieren Sie defektes/unsicheres HTTPS auf localhost
Wenn HTTPS in Node.js falsch konfiguriert und unsicher ist (z. B. die Verwendung eines selbstsignierten Zertifikats anstelle vonNicht angebenmein eigenes.ca()
), ist ein Anruf weiterhin möglich.trustLocalhost()
etwas erlaubenlocalhost
Anfrage für:
const res = waiting request.get("https://localhost").trustLocalhost()
Und.connect("127.0.0.1")
Zusammen kann dies dazu verwendet werden, HTTPS-Anfragen an jede beliebige Domäne zu erzwingen, zu der sie umgeleitet werdenlocalhost
。
Es ist im Allgemeinen sicher, fehlerhaftes HTTPS auf localhost zu ignorieren, da die Loopback-Schnittstelle nicht für nicht vertrauenswürdige Netzwerke verfügbar ist. Vertrauenlocalhost
Könnte in Zukunft zur Standardeinstellung werden. verwenden.trustLocalhost(false)
Obligatorische Inspektion127.0.0.1
Zuverlässigkeit.
Wir unterstützen die Deaktivierung der HTTPS-Sicherheit bei Anfragen an andere IP-Adressen absichtlich nicht, da diese Optionen letztendlich als schnelle „Lösungen“ für HTTPS-Probleme missbraucht werden. Sie können von herunterladenLassen Sie uns verschlüsselnHolen Sie sich ein kostenloses HTTPS-Zertifikat oder richten Sie Ihre eigene CA ein (.as(as_public_pem)
), um Ihr selbstsigniertes Zertifikat vertrauenswürdig zu machen.
Unterstützung von Promise- und Generatorfunktionen
Die Anfrage eines SuperAgents ist ein „thenable“-Objekt (ein Objekt mit einer then-Methode), das mit JavaScript Promise und kompatibel istasynchron/warten
Grammatisch kompatibel.
const res = Warten auf request.get(url);
Wenn Sie Promise verwenden,will nichtüberweisen.Ende()
oder.Rohr()
. jede Verwendung.Dann()
odererwarten
Alle anderen Möglichkeiten zur Verwendung von Anfragen sind deaktiviert. Bildcoso eine Bibliothek oder ähnlicheszuEin solcher Webframe kann auf jeder SuperAgent-Methode vorhanden seinErtrag
::
const req = request .get('http://local') .auth('tobi', 'learnboost');const res = yield req;
Beachten Sie, dass SuperAgent eine globale erwartetVersprechen
Objekt existiert. Sie benötigen eine Polyfüllung, um Promises in Internet Explorer oder Node.js 0.10 verwenden zu können.
Browser- und Knotenversion
Es gibt zwei Implementierungen von SuperAgent: eine für Webbrowser (mit XHR) und eine für Node.JS (mit dem Kern-http-Modul). Standardmäßig wählen Browserify und WebPack die Browserversion aus.
Wenn Sie Code für Node.JS mit WebPack kompilieren möchten, müssen Siemussin seiner Konfiguration angegebenKnotenziel。
Verwenden Sie die Browserversion in Electron
ElektronDie Entwickler berichten, dass Sie die Browserversion von SuperAgent anstelle der Node-Version verwenden könnenrequire('superagent/superagent')
. Dadurch wird Ihre Anfrage auf der Registerkarte „Netzwerk“ der Chrome Developer Tools angezeigt. Beachten Sie, dass diese Umgebung weder von der automatisierten Testsuite abgedeckt noch offiziell unterstützt wird.
Verwenden Sie einen Proxy, um Anfragen zu senden
Kann die eines anderen Autors verwendenSuperagent-ProxyModul
Übersetzungsanweisungen
Der gesamte Inhalt des Dokuments wurde entsprechend dem englischen Originaldokument übersetzt und der Übersetzer ist nicht gut genug. Bitte weisen Sie daher auf Fehler hin
FAQs
What is SuperAgent in node JS? ›
SuperAgent is light-weight progressive ajax API crafted for flexibility, readability, and a low learning curve after being frustrated with many of the existing request APIs. It also works with Node. js!
How does SuperAgent work? ›The SuperAgent receives a wake-up call from McAfee ePO, then wakes up the agents in its subnet. Note: This broadcast is an alternative to sending ordinary wake-up calls to each agent in the network or sending agent wake-up task to each computer.
Does SuperAgent return a promise? ›Superagent doesn't directly return promises, but its request object does expose a then method which returns a Promise.
What is SuperAgent in testing? ›Supertest is a Node. js library that you can use to test your API. It extends another library called Superagent, which is a JavaScript HTTP client for Node. js and browsers.
How do I call another API in node JS? ›js installed, you should be able to run the script using the following command: node api-call . That will execute the JavaScript file using the Node. js runtime. The script will make an API call to JSONPlaceholder and return an array of objects.
How to get data from API in node JS? ›There are several different ways you can fetch data from an API in Node. js. Some of the most common methods include using the built-in http module, using a third-party library like Axios or the request-promise library, and using the fetch() function or the fetch API.
How to fetch data from API in Express JS? ›To use the NodeJS Fetch API, we need to call the fetch() method as we do on the client side. fetch(url[, options]); The url parameter is the URL of the host from which we want to fetch the resource.
How to make an HTTP GET request in node js? ›- Introduction.
- Method-1: Using HTTPS Module.
- Method-2: Using Axios.
- Method-3: Using SuperAgent.
- Method-4: Using Unirest.
- Method-5: Using Fetch API.
- Recap.
- Basic axios usage notes.
- Send a GET request to fetch data.
- Send a POST request to submit data.
- Pass query string parameters to a GET request.
- Send a request with HTTP headers.
- Send a request with a secret or API key.
- Send multiple HTTP requests in sequence.
A promise represents the future result of an asynchronous operation. Of course, writing them the way you do, you get little benefit. However, Promises are more than just callbacks. They are a very mighty abstraction, allow cleaner and better, functional code with less error-prone boilerplate.
Does promise use callback? ›
Essentially, a promise is a returned object to which you attach callbacks, instead of passing callbacks into a function.
Why use promise over callback? ›The superiority of promises over callbacks is all about trust and control. Let me explain. We generally need to use callbacks (or promises) when there is a slow process (that's usually IO-related) that we need to perform without blocking the main program process.
How to test an API in node JS? ›- const request = require('supertest');
- const {expect} = require('expect');
-
- const app = require('../app');
-
- describe('Testing POSTS/answers endpoint', () => {
- it('respond with valid HTTP status code and description and message', async () => { // add `async` keyword here.
By default, supertest will send your form data with Content-Type of application/x-www-form-urlencoded . If the client wants to send a more complex data types, you way want to use JSON format, which is application/json . To do that we can use another method from supertest called send .
What is Supertest API? ›What is Supertest? Supertest is a Node. js library that allows developers and testers to test the APIs. It enables developers and testers to write automated tests for routes and endpoints. Supertest can be used as a standalone library or with testing frameworks like Mocha and Jest.
How do you call an API inside an API? ›- Find the URI of the external server or program.
- Add an HTTP verb.
- Include a header.
- Include an API key or access token.
- Wait for the response.
- public class StateController : ApiController.
- {
- [HttpGet]
- [Route("api/State/StateList")]
- public List<StateDto> StateList()
- {
- List<StateDto> StateList = new List<StateDto>();
- SqlConnection sqlConnection = new SqlConnection();
- Add a Datasource with OpenAPI specification. Datasource for REST service without OpenAPI specification.
- Add a service. Define the methods that map to the operations.
- Add a Controller. Inject the Service in the constructor. Add the REST endpoints.
- More examples.
- Further reading.
To get JSON from a REST API endpoint using Node. js, you must send an HTTP GET request to the REST API server and provide an Accept: application/json request header. The Accept: application/json header tells the REST API server that the API client expects to receive data in JSON format.
How do I pull all data from an API? ›- Step 1: retrieve the API data URL.
- Step 2: create a new, blank Excel document.
- Step 3: paste the API data URL in the Excel document.
- Step 4: Enter the credentials.
- Step 5: load the API data in the Excel.
How do I get all data from an API? ›
The most straightforward way of accessing data from an API endpoint is simply viewing it in the browser. As long as you're connected to the internet, you should be able to preview most API's data regardless of its format.
How to get data from JSON fetch API? ›To fetch JSON from the server using the Fetch API, you need to use the JavaScript fetch() method and then call the response. json() method to get the JSON data as a JavaScript object. The response. json() method reads the data returned by the server and returns a Promise that resolves with a JSON object.
How to get data from API in JavaScript without fetch? ›- onreadystatechange — Defines a function to be called when the readyState property changes.
- readyState — Holds the status of the XMLHttpRequest (0… ...
- responseText — Returns the response data as a string.
- responseXML — Returns the response data as XML data.
- status — Returns the status-number of a request.
You can easily extract this information from the HTTP Request headers. There is a request header called 'User-Agent'. Access this header from the request and you'll get a string with information like the Browser Model, Platform(OS), geckoversion etc.
How to GET data from HTTP request in JavaScript? ›open() method, when you specify the request type (GET) and the endpoint/URL where you want to request data. Another method you will use is . send() , which sends the request to the server. You can also specify the format in which the data will be returned using the responseType method.
How to GET data from HTTP request? ›GET is an HTTP method for requesting data from the server. Requests using the HTTP GET method should only fetch data, cannot enclose data in the body of a GET message, and should not have any other effect on data on the server.
What is the difference between HTTP request and HTTP GET in node? ›Since most requests are GET requests without bodies, Node. js provides this convenience method. The only difference between this method and http. request() is that it sets the method to GET and calls req.
What is the best HTTP client for node? ›Currently, Got is the most popular HTTP client library for Node. js, with over 19 million downloads per week. Below is a quick example of using Got to fetch the users from our mock API: const got = require('got'); got.
How to send HTTP request and get response in JavaScript? ›- Create a new XMLHttpRequest object.
- Open a connection by specifying the request type and endpoint (the URL of the server).
- Send the request.
- Listen for the server's response.
Till now common perception was that for getting out of callback hell we should use promises or for clean code but what about efficiency. So from my findings i assure you ES6 promises are faster and recommended than old callbacks. I recommend to get a common understanding of JS event loop.
Why we use async instead of promises? ›
Async/Await is much cleaner and readable to write as compared to Promises. Async/Await looks like Synchronous. Promises has support for automatic error handling using .
Are promises asynchronous or synchronous? ›A promise is an object returned by an asynchronous function, which represents the current state of the operation. At the time the promise is returned to the caller, the operation often isn't finished, but the promise object provides methods to handle the eventual success or failure of the operation.
What is the difference between async await and callback promise? ›In summary, promises, callbacks, and async/await are all ways to handle asynchronous operations in JavaScript, with promises providing a more elegant way of handling async operations, callbacks being a more traditional way, and async/await providing a more convenient and readable way of handling async operations.
What is the difference between callback and promise in node? ›With callback we pass a callback into a function that would then get called upon completion. With promises, you attach callbacks on the returned promise object. A callback is a function that is to be executed after another function has finished executing. Async callbacks are functions that are passed as arguments.
What are the disadvantages of callbacks? ›The biggest problem with callbacks is that they do not scale well for even moderately complex asynchronous code. The resulting code often becomes hard to read, easy to break, and hard to debug.
What are the three arguments involved by callback? ›Looking at the documentation on the every method, you can see that the callback is passed three arguments: an element of the array, the index of that element, and the whole array.
Can you test API manually? ›API testing can be either manual or automated. Manual API testing involves manually sending requests to an application's interface and verifying the responses, while automated API testing utilizes specialized software tools to send requests and validate responses.
How do you check if an API is working or not? ›- Send the request with necessary input data.
- Get the response having output data.
- Verify that the response returned as expected in the requirement.
- Test for the typical or expected results first.
- Add stress to the system through a series of API load tests.
- Test for failure. ...
- Group test cases by test category.
- Prioritize API function calls so that it will be easy for testers to test quickly and easily.
const request = require('supertest'); const bodyParser = require('body-parser'); let AValidator = require('../src/AValidator'); let BValidator = require('../src/BValidator'); BValidator = jest. fn(); AValidator = jest. fn(); app = require('../src/app'); app.
How do I send form data to my web server? ›
To post HTML form data to the server in URL-encoded format, you need to make an HTTP POST request to the server and provide the HTML form data in the body of the POST message in key=value format. You must also specify the data type using the Content-Type: application/x-www-form-urlencoded request HTTP header.
Which tool is used for API testing? ›The tool that is most commonly used for API testing is Testim. Testim is a powerful tool for API testing that makes it easy to create and execute automated tests for your API.
What is the difference between mocha and SuperTest? ›Mocha tests run serially, allowing for flexible and accurate reporting, while mapping uncaught exceptions to the correct test cases. On the other hand, SuperTest is detailed as "*A library for testing node. js HTTP servers *". It is a super-agent driven library for testing node.
What is super agent distributed repository? ›A SuperAgent is a distributed repository which is designed to reduce the load on McAfee ePO. McAfee ePO manages how the SuperAgent is replicated. The SuperAgent caches information received from McAfee ePO, the Master Repository, an HTTP, or an FTP repository, and distributes it to the agents in its broadcast domain.
How do you get a super agent on property finder? ›You require a minimum of 10 to keep your SuperAgent status. Live Listings: Offers an overview of your properties that are currently live on Property Finder. Between 5 to 80 live properties are required to gain and maintain your SuperAgent status.
How to use SSO in node JS? ›- Set up your Identity Provider in miniOrange. We are using ADFS to show the setup. ...
- Configure miniOrange settings in your Identity Provider. ...
- Configure Node JS in miniOrange. ...
- Single Logout (SLO)
Building your Agent Network
If potential clients contact your agency but you do not have the services they are looking for, you can refer them to another agency you trust in your network. In this scenario, you would be the sub-agent and the agency you refer to would be the super-agent.
Super Agent Tools is an award-winning platform for insurance agents that provide an abundance of resources that are available on-demand, whenever and wherever they need them.
What is McAfee agent handler? ›Agent handlers transparently handle requests for software and cache the required files after downloading from the master repository. No configuration is necessary. Introducing Agent Handlers. Purpose of Agent Handler. McAfee Agent Handlers.
How do I set up a Zillow profile as an agent? ›- Register on Zillow. ...
- Add a profile photo. ...
- Add your professional information. ...
- Promote your brand in the about me section. ...
- Add your past sales. ...
- Request reviews. ...
- Connect your listings.
What API should you use to get Node information? ›
The cluster nodes info API allows to retrieve one or more (or all) of the cluster nodes information. All the nodes selective options are explained here. By default, it returns all attributes and core settings for a node.
Which API creates a client in Nodejs? ›The Node. js Client uses the MarkLogic REST Client API to communicate with MarkLogic Server, so it uses the same security model.
What is the best library for API calls? ›You should be using Axios in place of the Node. js native HTTP or HTTPS standard libraries for API calls due to the following features: Axios is the best-suited library to stop request tasks.
How do I enable SSO on my browser? ›- On your Windows Control Panel, select Network and Internet > Internet Options > Security > Local intranet > Sites > Advanced.
- Click Add.
- Click OK twice to close Internet Options.
- In the SAC Admin Portal, create or edit a web application for which to configure SSO. ...
- Under Single Sign-On, select an authentication type: ...
- Save. ...
- (If using JWT Token) Enable user groups in JWT authentication:
miniOrange allows you to authenticate your users via API authentication provider into multiple applications. This way, you can achieve Single Sign-On (SSO) into your applications where the users will need to authenticate themselves via your API Server only once and they can access all the configured applications.