node.js createserver获取请求值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node.js createserver获取请求值相关的知识,希望对你有一定的参考价值。

参考技术A 方法说明:
该函数用来创建一个HTTP服务器,并将 requestListener 作为 request 事件的监听函数。
语法:

复制代码代码如下:

http.createServer([requestListener])

由于该方法属于http模块,使用前需要引入http模块(var http= require(“http”) )
接收参数:
requestListener 请求处理函数,自动添加到 request 事件,函数传递两个参数:
req 请求对象,想知道req有哪些属性,可以查看 “http.request 属性整合”。
res 响应对象 ,收到请求后要做出的响应。想知道res有哪些属性,可以查看 “http.response属性整合”。
例子:
例子中res指定了响应头,响应体内容为node.js,用end结束。
最后调用listen函数,监听3000端口。

复制代码代码如下:

var http = require('http');
http.createServer(function(req, res)
res.writeHead(200, 'Content-type' : 'text/html');
res.write('<h1>Node.js</h1>');
res.end('<p>Hello World</p>');
).listen(3000);

源码:

复制代码代码如下:

exports.createServer = function(requestListener)
return new Server(requestListener);
;
参考技术B .query 里面去get

使用 createServer() 时如何获取 node.js 服务器可用的 IP

【中文标题】使用 createServer() 时如何获取 node.js 服务器可用的 IP【英文标题】:How to get node.js server available IPs when using createServer() 【发布时间】:2021-08-06 03:54:36 【问题描述】:

当我使用以下方式启动一个简单的服务器时:

http-server -S -C cert.pem

我得到了一个可用 IP 的列表,我可以选择一个来连接:

Starting up http-server, serving ./ through https
Available on:
  https://192.168.1.2:8080
  https://169.254.187.206:8080
  https://169.254.74.61:8080
  https://127.0.0.1:8080
Hit CTRL-C to stop the server

如何在使用 createServer() 时获得相同的列表?

我试过这个来获取一个地址:

var server = https.createServer(options, function(request, response) 
  var uri = url.parse(request.url).pathname, 
      filename = path.join(process.cwd(), uri);
  
  fs.exists(filename, function(exists) 
    if(!exists) 
      response.writeHead(404,  "Content-Type": "text/plain" );
      response.write("404 Not Found\n");
      response.end();
      return;
    
 
    if (fs.statSync(filename).isDirectory()) 
      filename += '/index.html';
 
    fs.readFile(filename, "binary", function(err, file) 
      if(err)         
        response.writeHead(500, "Content-Type": "text/plain");
        response.write(err + "\n");
        response.end();
        return;
      
      
      var mimeType = mimeTypes[filename.split('.').pop()];
      
      if (!mimeType) 
        mimeType = 'text/plain';
      
      
      response.writeHead(200,  "Content-Type": mimeType );
      response.write(file, "binary");
      response.end();
    );
  );
    
).listen(parseInt(port, 10));
    
var ip = server.address();
    
console.log("\n\n Static file server running at:\n address: " + ip.address + "\n family: " + ip.family + "\n port: " + ip.port + "\n\n Hit CTRL+C to stop the server");

我得到了:

Static file server running at:
address: undefined
family: IPv6
port: 8080

Hit CTRL+C to stop the server

今天我花了一个小时试图弄清楚为什么我不能再通过 WIFI 连接到我的本地服务器。原来,不知何故,我使用的地址 https://192.168.1.2:8080 已更改为 https://192.168.1.3:8080 而没有添加任何设备...

【问题讨论】:

【参考方案1】:

我没有足够的声誉发表评论,所以我把它放在这里我认为可以帮助你。

首先,您应该为您的机器分配一个静态 ip,您可以:

在您的计算机中定义一个 IP,而不是依赖路由器的 DHCP 服务 将您的 DHCP(可能在您的 routeur 配置中)配置为始终为您提供相同的 IP 地址(静态 DHCP)

然后,当您使用 listen() 时,您可以将固定 ip 设置为:listen(8080, 192.168.1.2)

【讨论】:

很有趣,但我只是想起了一种更简单、侵入性更小的方法:使用简单的 node.js 服务器列出的第二个地址,它永远不会像我发现的那样改变(即使我发现第一个地址也会改变)断开从 PC 到路由器的 LAN 电缆)-我现在要做,但我仍然很好奇如何获得该 IP 列表。 你可以看一下上面的ip列表:1270.0.1,永远不会改变,它是主机的本地链接,169.xx.xx.xx的ip是DHCP客户端时自动生成的地址计算机找不到/获取IP,并且192.168.1.2通过DHCP影响到您的计算机,请使用静态DHCP修复此问题【参考方案2】:

您可以从os 模块获取所有使用networkInterfaces() 地址的网络接口。

文档:https://nodejs.org/api/os.html#os_os_networkinterfaces

如果您检查http-server 的source code,它正在做这样的事情:

var os = require('os');
var ifaces = os.networkInterfaces();

Object.keys(ifaces).forEach(function (dev) 
  ifaces[dev].forEach(function (details) 
    if (details.family === 'IPv4') 
      console.log(details.address);
    
  );
);

【讨论】:

以上是关于node.js createserver获取请求值的主要内容,如果未能解决你的问题,请参考以下文章

Node.js开启服务器

node中的http模块

nginx使用反向代理支持node.js服务

使用 Node.js HTTP 服务器获取和设置单个 Cookie

node.jsGET/POST请求Web 模块

node.js服务器搭建