2022-3-31 express app.listen引发的思考(1)

最近看到express,有串代码理解上出了点问题;

var server = app.listen(8081, function () {//应用启动端口为8081

    var host = server.address().address;
    var port = server.address().port;

    console.log("应用实例,访问地址为 http://%s:%s", host, port)

});

这是那个代码块的内容
开始我不太理解,用host变量来接收,server.address().address;
这是个什么意思,这里的server是什么呢,就好比

看着他是指代的var生明的server变量,但是为什么他可以调用address()这个方法,所以等号的右边应该是一个对象才对;
在js语境中,server就是一个变量,而且他的数据类型是一个对象。

那么现在要搞清楚,app.listen是什么,显然他是express的api;

所以我去查了,express官网,这个传参的格式着实有点看不懂;

image
翻译:

绑定并侦听指定主机和端口上的连接。此方法与节点的http.服务器听我说 相同。如果端口被省略或为0,操作系统将分配一个任意未使用的端口,这对于自动化任务(测试等)等情况很有用。
var express = require('express')
var app = express()
app.listen('/tmp/sock')

express()返回的应用程序实际上是一个JavaScript函数,旨在作为回调传递给节点的HTTP服务器,以处理请求。这使得为应用程序的HTTP和HTTPS版本提供相同的代码基础变得很容易,因为应用程序不会继承这些代码(它只是一个回调):
var express = require('express')
var https = require('https')
var http = require('http')
var app = express()

http.createServer(app).listen(80)
https.createServer(options, app).listen(443)

应用程序。方法返回一个http服务器对象,和(对于HTTP)是一种方便的方法,用于:
app.listen = function () {
  var server = http.createServer(this)
  return server.listen.apply(server, arguments)
}

注意:所有形式的节点的http。服务器listen()方法实际上是受支持的。

打印一下,该服务对象的那个方法:
image

[未完,待续。。。]

posted @ 2022-03-31 13:28  皮皮买  阅读(193)  评论(0)    收藏  举报