Nodejs createServer端口问题

Nodejs createServer端口问题

通过这个代码创建web服务

var ser = http.createServer(function (request ,response) {
}).listen(4567);  

之后如何读取这个端口,有类似ser.port这样的方法吗,大家先不要管这个问题蛋疼不蛋疼,因为我部署到云端之后想读取真正服务监听的端口。

8 回复

Node.js createServer 端口问题

在使用 Node.js 创建一个 Web 服务器时,你可能会遇到需要读取服务器实际监听的端口号的情况。这在部署应用到云端(如 Heroku 或 AWS)时尤其重要,因为这些平台通常会动态分配端口号。

示例代码

首先,让我们来看一下基本的代码示例:

const http = require('http');

// 创建一个 HTTP 服务器
const server = http.createServer((request, response) => {
  response.writeHead(200, { 'Content-Type': 'text/plain' });
  response.end('Hello World\n');
});

// 监听指定的端口
const PORT = process.env.PORT || 4567;
server.listen(PORT, () => {
  console.log(`Server running at http://localhost:${PORT}/`);
});

在这个例子中,我们使用了 process.env.PORT 来获取环境变量中的端口号。如果环境变量中没有定义 PORT,则默认使用 4567

如何读取实际监听的端口

在 Node.js 中,你不能直接通过 server.port 这样的属性来获取当前服务器实际监听的端口号。但是,你可以通过以下几种方式来获取该信息:

  1. 监听 listening 事件: 当服务器开始监听指定端口时,会触发 listening 事件。你可以在该事件的回调函数中打印或记录端口号。

  2. 检查 server.address() 方法: 服务器开始监听后,可以调用 server.address() 方法来获取服务器当前绑定的信息,包括端口号。

server.on('listening', () => {
  const addressInfo = server.address();
  console.log(`Server is listening on ${addressInfo.address}:${addressInfo.port}`);
});

在这个例子中,server.address() 返回一个对象,其中包含 addressport 属性,分别表示服务器绑定的地址和端口号。

总结

通过上述方法,你可以轻松地获取并记录 Node.js 服务器实际监听的端口号。这对于调试和部署到云端时尤为重要,因为云端平台通常会自动分配端口号。希望这些示例代码和解释对你有所帮助!


存在变量里?

var port = 4567;
var ser=http.createServer(function(request,response) 
{
}).listen(port);

这样不行的,在cloudfoundry可以用process.env.VMC_APP_PORT这个变量访问,谢谢了哈

可以获取到的。

http://nodejs.org/docs/latest/api/net.html#net_server_address

server.address(); // { port: 12346, family: 'IPv4', address: '127.0.0.1' }

嗯 谢谢你 但是你这个例子不是htt.creatServer() 我测试了的 不行

http.Server 也是继承 net.Server 的:

var http = require('http');

var s = http.createServer(); s.lisnten(8080); console.log(s.address()); // { address: ‘0.0.0.0’, family: ‘IPv4’, port: 8080 }

额 为什么我测试的是读不出来呢

在Node.js中,你可以使用process.env.PORT来获取环境变量中的端口号。通常在云服务中,环境变量会包含当前服务应该监听的端口号。

示例代码如下:

const http = require('http');

// 尝试从环境变量中获取端口号,如果没有设置则默认为4567
const port = process.env.PORT || 4567;

const server = http.createServer((request, response) => {
    response.writeHead(200, { 'Content-Type': 'text/plain' });
    response.end('Hello World\n');
});

server.listen(port, () => {
    console.log(`Server running at http://localhost:${port}/`);
});

解释

  1. 环境变量process.env.PORT 用于获取环境变量中的端口号。
  2. 默认值:如果环境变量中没有设置端口号,则默认为 4567
  3. 创建服务器:使用 http.createServer() 创建一个HTTP服务器。
  4. 监听端口:服务器使用 listen(port) 方法监听指定的端口,并输出当前运行的URL。

如果你需要在运行时获取当前监听的端口号,可以直接访问 server.address().port

console.log(`Server is listening on port ${server.address().port}`);

这样可以确保你在云端环境中正确地读取到服务实际监听的端口号。

回到顶部