在Express.js中,javascript - app.set('port', 8080)和app.listen(8080)有什么区别?

25
我一直在尝试使用Express.js启动网站。起初,我使用了app.set('port', 8080),但浏览器无法连接到页面。之后,我将代码更改为app.listen(8080),网页正常显示。
这让我想知道这两个函数之间有什么区别?
3个回答

44

app.set('port', 8080) 是设置一个名为port的“变量”为8080,稍后您可以使用app.get('port')访问它。从浏览器访问您的网站实际上是行不通的,因为您还没有告诉您的应用程序监听和接受连接。

另一方面,app.listen(8080) 监听端口8080上的连接。这是告诉您的应用程序监听和接受连接的部分。如果您在代码中有此内容,则可以使用localhost:8080从浏览器访问您的应用程序。

这两个命令实际上可以一起使用:

app.set('port', 8080);
app.listen(app.get('port'));

1
你能解释一下为什么使用app.set存储端口值是常见的做法吗?或者为什么会有东西被存储在这里而不是普通变量中? - Gershom Maes
@GershomMaes 在这里使用 app.set 存储端口值可能不是一个好的例子,但对于其他值,使用 app.set 而不是普通变量来存储它们是有意义的,就像 app.set('views', 'somepath'); 这样告诉 express 去哪里查找视图一样。使用 app.set 存储的值可以在 express 或您的应用程序使用的其他软件包中内部使用。 - Arnelle Balane

3

在页面底部声明变量server并定义所需端口非常简单。您可以使用console.log打印端口,以便在命令行中查看。

var server = app.listen(8080,function(){
   console.log('express server listening on port ' + server.address().port);
    })

1
提醒一下,port不再是一个函数。在上面的例子中:server.address().port将起作用。 - AlbertEngelB

1

例如:

var port = 8080
app.listen(port);
console.log(`Listening on port ${port}`);

逐行解释:

var port = 8080; =>创建一个变量(javascript中的所有内容都是对象),并将端口设置为本地主机8080 app.listen(port); =>使用express模块创建的应用程序检查是否有可用连接,如果有,则连接并启动应用程序 console.log('Listening on port ' + port); =>成功部署后,在终端上显示消息


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接