如何使用NodeJS connect从请求中提取请求http标头

Ale*_*ing 243 node.js

我想获得使用Node JS的连接库包发出的请求的"Host"头.我的代码看起来像:

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

    var host = req.???

  })
 .listen(3000);
Run Code Online (Sandbox Code Playgroud)

连接的文档在这里,但我没有看到任何详细说明req上述代码中的对象的API .http://www.senchalabs.org/connect/

编辑:注意一个成功的答案必须指向文档(我需要这个来验证哪个版本提供了我正在寻找的API).

Sam*_*ami 299

如果使用Express 4.x,则可以使用Express 4.x API Reference中req.get(headerName)描述的方法

  • 还有更好命名的`req.header(headerName)`别名. (159认同)
  • 无需引入Express即可获得这种基本功能。而是如下文所述在NodeJS中本机使用。https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/ (4认同)

小智 167

要查看HTTP请求标头列表,您可以使用:

console.log(JSON.stringify(req.headers));
Run Code Online (Sandbox Code Playgroud)

以JSON格式返回列表.

{
"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"
}
Run Code Online (Sandbox Code Playgroud)

  • 在这里说明显而易见的事情:`headerValue = req.headers['headerName']; ` (6认同)
  • 它们只是记录那些未派生的属性。上面提到的 Express 文档中有一段注释:_“req 对象是 Node 自带请求对象的增强版,支持所有[内置字段和方法](https://nodejs.org/api/http.html #http_class_http_incomingmessage)."_ 包含指向底层对象的 Node 文档的链接。 (5认同)
  • 我发现这比上面接受的答案更有帮助。JSON.stringify 使一切变得不同。 (3认同)
  • 为什么正式Express文档中没有包含`req.headers`?https://expressjs.com/zh-CN/api.html#req (3认同)

Ana*_*liy 134

检查console.log(req)或输出console.log(req.headers);

  • @AlexSpurling http://nodejs.org/api/http.html#http_request_headers.Connect只是从Node的[HTTP模块](http://nodejs.org/api/http.html)扩展类型 - [`http.ServerRequest`](http://nodejs.org/api/http.html#http_class_http_serverrequest )和[`http.ServerResponse`](http://nodejs.org/api/http.html#http_class_http_serverresponse).在Node的文档中找到的属性或事件也应该可用于Connect(以及通过进一步扩展,Express). (11认同)
  • 你是怎么知道req.headers的?该字段在哪个版本中可用? (10认同)
  • req 的类型是 http.IncomingMessage (2认同)

Bon*_*les 48

var host = req.headers['host']; 
Run Code Online (Sandbox Code Playgroud)

标头存储在JavaScript对象中,标头字符串作为对象键.

同样,可以使用获得用户代理标头

var userAgent = req.headers['user-agent']; 
Run Code Online (Sandbox Code Playgroud)

  • 根据@Steve关于它区分大小写的评论,所有标题都是低级的.因此,如果您设置标题"Origin"(大写"O"),则请求标头集合中的唯一元素将是"origin",其中小写"o". (6认同)
  • 注意:命名索引值为FreakING!区分大小写 (3认同)

小智 7

logger.info({headers:req.headers})
Run Code Online (Sandbox Code Playgroud)

输出;

 "headers":{"authorization":"Basic bmluYWQ6bmluYWQ=","content-
type":"application/json","user-
agent":"PostmanRuntime/7.26.8","accept":"*/*","postman-token":"36e0d84a-
55be-4661-bb1e-1f04d9499574","host":"localhost:9012","accept-
encoding":"gzip, deflate, br","connection":"keep-alive","content-
length":"198"}
Run Code Online (Sandbox Code Playgroud)