NodeJS:如何获取服务器的端口?
您经常会看到 Node 的示例 hello world 代码创建一个 Http Server,开始侦听端口,然后跟随以下内容:
console.log('Server is listening on port 8000');
但理想情况下您会想要这样:
console.log('Server is listening on port ' + server.port);
How do Iretrieve the port the server is current Listening在调用 server.listen()
之前不将数字存储在变量中?
我以前见过这样做,但我在 Node 文档中找不到它。也许是想表达一些具体的东西?
You often see example hello world code for Node that creates an Http Server, starts listening on a port, then followed by something along the lines of:
console.log('Server is listening on port 8000');
But ideally you'd want this instead:
console.log('Server is listening on port ' + server.port);
How do I retrieve the port the server is currently listening on without storing the number in a variable prior to calling server.listen()
?
I've seen this done before but I can't find it in the Node documentation. Maybe it's something specific to express?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(20)
Express 4.x 答案:
Express 4.x(根据下面 Tien Do 的答案),现在将 app.listen() 视为异步操作,因此listener.address() 只会返回应用程序内部的数据.listen() 的回调:
Express 3 答案:
我认为您正在寻找这个(特定于 Express?):
当您从
表达命令:
Express 4.x answer:
Express 4.x (per Tien Do's answer below), now treats app.listen() as an asynchronous operation, so listener.address() will only return data inside of app.listen()'s callback:
Express 3 answer:
I think you are looking for this(express specific?):
You might have seen this(bottom line), when you create directory structure from
express
command:在express v3.0中,
不再起作用!对于 Express v3.0,您应该这样创建一个应用程序和一个服务器:
我自己遇到了这个问题,并想记录新语法。 Express v3.0 中的此更改和其他更改可在 https://github.com/visionmedia/express/wiki/Migration-from-2.x-to-3.x
In express v3.0,
no longer works! For Express v3.0, you should create an app and a server this way:
I ran in to this issue myself and wanted to document the new syntax. This and other changes in Express v3.0 are visible at https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x
如果您在处理请求时需要端口并且应用程序不可用,您可以使用以下命令:
In case when you need a port at the time of request handling and app is not available, you can use this:
在当前版本(v0.5.0-pre)中,端口似乎可以作为服务器对象上的属性使用,请参阅 http://nodejs.org/docs/v0.4.7/api/net.html#server.address
输出
In the current version (v0.5.0-pre) the port seems to be available as a property on the server object, see http://nodejs.org/docs/v0.4.7/api/net.html#server.address
outputs
我使用这种方式 Express 4:
通过使用这种方式,我不需要为侦听器/服务器使用单独的变量。
I use this way Express 4:
By using this I don't need to use a separate variable for the listener/server.
如果您使用的是express,您可以从请求对象中获取它:
If you're using express, you can get it from the request object:
从来不需要 http 模块。
在 Express 3 或 4 中不需要额外导入
http
。分配listen()
的结果就足够了。同样,这是在 Express 3.5.1 和 Express 3.5.1 中进行测试的。 4.0.0。从来没有必要导入
http
。 Listen 方法返回一个 http 服务器对象。https://github.com/visionmedia/express/blob/master /lib/application.js#L531
Requiring the http module was never necessary.
An additional import of
http
is not necessary in Express 3 or 4. Assigning the result oflisten()
is enough.Again, this is tested in Express 3.5.1 & 4.0.0. Importing
http
was never necessary. The listen method returns an http server object.https://github.com/visionmedia/express/blob/master/lib/application.js#L531
如果您没有定义端口号并且您想知道它在哪个端口上运行。
仅供参考,每次它都会在不同的端口运行。
If you did not define the port number and you want to know on which port it is running.
FYI, every time it will run in a different port.
您可以使用
server.address().port
获取端口号就像下面的代码一样:
You can get the port number by using
server.address().port
like in below code:
使用最新的node.js(v0.3.8-pre):我检查了文档,检查了http.createServer()返回的服务器实例,并阅读了server.listen()的源代码......
遗憾的是,该端口仅临时存储为局部变量,并最终作为调用 process.binding('net').bind() 的参数,这是一个本机方法。我没有再看下去。
似乎没有比保留对您提供给 server.listen() 的端口值的引用更好的方法了。
With latest node.js (v0.3.8-pre): I checked the documentation, inspected the server instance returned by http.createServer(), and read the source code of server.listen()...
Sadly, the port is only stored temporarily as a local variable and ends up as an argument in a call to process.binding('net').bind() which is a native method. I did not look further.
It seems that there is no better way than keeping a reference to the port value that you provided to server.listen().
从旧样式转换为新(Express 3.x)样式的最简单方法如下:
在 3.x 之前,它的工作方式如下:
The simplest way to convert from the old style to the new (Express 3.x) style is like this:
Pre 3.x it works like this:
我也在问自己这个问题,然后我来到 Express 4.x 指南页面 看到这个示例:
I was asking myself this question too, then I came Express 4.x guide page to see this sample:
findandbind
npm 为express/restify/connect 解决了这个问题:https: //github.com/gyllstromk/node-find-and-bindThe
findandbind
npm addresses this for express/restify/connect: https://github.com/gyllstromk/node-find-and-bind您可能正在寻找
process.env.PORT
。这允许您使用所谓的“环境变量”动态设置侦听端口。 Node.js 代码如下所示:您甚至可以使用
export PORT=5000
或任何您想要的端口在终端中手动设置动态变量。You might be looking for
process.env.PORT
. This allows you to dynamically set the listening port using what are called "environment variables". The Node.js code would look like this:You can even manually set the dynamic variable in the terminal using
export PORT=5000
, or whatever port you want.快递 v4+
express v4+
更简单的方法是调用
app.get('url')
,它会为您提供协议、子域、域和端口。The easier way is just to call
app.get('url')
, which gives you the protocol, sub domain, domain, and port.