1. 程式人生 > 其它 >2022-3-31 express app.listen引發的思考(1)

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官網,這個傳參的格式著實有點看不懂;


翻譯:

繫結並偵聽指定主機和埠上的連線。此方法與節點的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()方法實際上是受支援的。

列印一下,該服務物件的那個方法:

[未完,待續。。。]