So extrahieren Sie Anforderungs-http-Header aus einer Anforderung mithilfe von NodeJS connect


265

Ich möchte den "Host" -Header einer Anfrage erhalten, die mit dem Connect Library-Bundle von Node JS gestellt wurde. Mein Code sieht aus wie:

var app = connect()
  .use(connect.logger('dev'))
  .use(connect.static('public'))
  .use(function(req, res){

    var host = req.???

  })
 .listen(3000);

Die Dokumentation für connect ist hier, aber ich sehe reqim obigen Code keine detaillierten Angaben zur API des Objekts. http://www.senchalabs.org/connect/

Bearbeiten : Beachten Sie, dass eine erfolgreiche Antwort auf die Dokumentation verweisen muss (ich benötige diese, um zu überprüfen, welche Version die gesuchte API bereitgestellt hat).

Antworten:



198

Um eine Liste der HTTP-Anforderungsheader anzuzeigen, können Sie Folgendes verwenden:

console.log(JSON.stringify(req.headers));

um eine Liste im JSON-Format zurückzugeben.

{
"host":"localhost:8081",
"connection":"keep-alive",
"cache-control":"max-age=0",
"accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"upgrade-insecure-requests":"1",
"user-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36",
"accept-encoding":"gzip, deflate, sdch",
"accept-language":"en-US,en;q=0.8,et;q=0.6"
}

2
Ich fand das hilfreicher als die oben akzeptierte Antwort. Die JSON.stringify macht den Unterschied.
Patrick

1
In einem verwandten Punkt können Sie auch Folgendes tun: require('util').inspect(req.headers, {depth: null}Wenn Sie das Äquivalent zu dem wünschen, was Sie in der Knoten-REPL erhalten würden. So oder so endet man mit einer Schnur.
Mikermcneil

4
Warum ist req.headersdie offizielle Express-Dokumentation nicht enthalten? expressjs.com/en/api.html#req
user1063287

funktioniert nicht für ein Header-Objekt (Symbol-Objekt) einer Antwort - res.headers.
Codebeat

1
Hier das Offensichtliche darlegen:headerValue = req.headers['headerName'];
Asokan

140

Überprüfen Sie die Ausgabe von console.log(req)oderconsole.log(req.headers);


11
Wie haben Sie von req.headers erfahren? In welcher Version ist dieses Feld verfügbar?
Alex Spurling

11
@AlexSpurling nodejs.org/api/http.html#http_request_headers . Connect erweitert nur Typen aus dem HTTP-Modul von Node - http.ServerRequestund http.ServerResponse. Eigenschaften oder Ereignisse in der Node-Dokumentation sollten auch mit Connect (und im weiteren Sinne mit Express) verfügbar sein.
Jonathan Lonowski

1
Das macht mehr Sinn. Auch hier wäre es gut zu wissen, wo diese Informationen zu finden sind (dass der Typ der Anforderung tatsächlich http.ServerRequest ist). Die Dokumentation scheint dies nicht klar zu machen.
Alex Spurling

1
Art der Anforderung ist http.IncomingMessage
Anatoliy

Diese Liste emuliert http-Anfrage und kann für Sie nützlich sein: gist.github.com/3879071
Anatoliy

56
var host = req.headers['host']; 

Die Header werden in einem JavaScript-Objekt mit den Header-Zeichenfolgen als Objektschlüssel gespeichert.

Ebenso konnte der User-Agent-Header mit abgerufen werden

var userAgent = req.headers['user-agent']; 

3
HINWEIS: Der angegebene Indexwert ist FreakING !! Fall sensibel
Steve

9
Gemäß @Steve-Kommentar, bei dem zwischen Groß- und Kleinschreibung unterschieden wird, werden alle Header in Kleinbuchstaben geschrieben. Wenn Sie also den Header "Origin" (Großbuchstabe 'O') setzen, ist das einzige Element in der Sammlung der Anforderungsheader "origin" mit einem Kleinbuchstaben "o".
Rob
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.