2022-3-31 express app.listen引發的思考(1)
阿新 • • 發佈:2022-03-31
最近看到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()方法實際上是受支援的。
列印一下,該服務物件的那個方法:
[未完,待續。。。]