Anda sering melihat contoh halo kode dunia untuk Node yang menciptakan Server Http, mulai mendengarkan pada port, kemudian diikuti oleh sesuatu di sepanjang baris:
console.log('Server is listening on port 8000');
Tetapi idealnya Anda menginginkan ini sebagai gantinya:
console.log('Server is listening on port ' + server.port);
Bagaimana cara mengambil port yang sedang didengarkan server tanpa menyimpan nomor dalam variabel sebelum menelepon server.listen()
?
Saya telah melihat ini dilakukan sebelumnya tetapi saya tidak dapat menemukannya di dokumentasi Node. Mungkin itu sesuatu yang spesifik untuk diungkapkan?
javascript
node.js
express
port
David Tang
sumber
sumber
req.headers.host
Jawaban:
Ekspresikan 4.x jawaban:
Express 4.x (sesuai jawaban Tien Do di bawah), sekarang memperlakukan app.listen () sebagai operasi tidak sinkron, jadi listener.address () hanya akan mengembalikan data di dalam callback app.listen ():
Mengungkapkan 3 jawaban:
Saya pikir Anda mencari ini (spesifik ekspres?):
Anda mungkin telah melihat ini (garis bawah), ketika Anda membuat struktur direktori dari
express
perintah:sumber
var listener
yang dapat Anda gunakanthis.address().port
di dalamapp.listen()
callbackthis.address.port()
tetapi Anda tidak dapat menggunakannya di dalam fungsi panah. Anda perlu melakukan old schoolapp.listen(8000, function () { console.log('http://localhost:' + this.address().port); }
(ya, saya tahu backtick lebih bagus, tapi saya tidak bisa melakukannya di stack overflow comments)Dalam v3.0 ekspres,
tidak lagi berfungsi! Untuk Express v3.0, Anda harus membuat aplikasi dan server dengan cara ini:
Saya berlari ke masalah ini sendiri dan ingin mendokumentasikan sintaks baru. Perubahan ini dan lainnya dalam Express v3.0 dapat dilihat di https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x
sumber
0
untukserver.listen()
, dalam hal nomor port acak ditugaskan. Anda mungkin melakukan ini jika Anda menjalankan beberapa aplikasi Express pada satu server dan Anda tidak ingin menetapkan nomor port secara manual.app.listen()
juga mengembalikan contoh server http.Dalam versi saat ini (v0.5.0-pre) port tampaknya tersedia sebagai properti pada objek server, lihat http://nodejs.org/docs/v0.4.7/api/net.html#server.address
output
sumber
Jika Anda membutuhkan port pada saat penanganan permintaan dan aplikasi tidak tersedia, Anda dapat menggunakan ini:
sumber
Jika Anda menggunakan express, Anda bisa mendapatkannya dari objek permintaan:
sumber
Saya menggunakan cara ini Express 4:
Dengan menggunakan ini saya tidak perlu menggunakan variabel terpisah untuk pendengar / server.
sumber
this
akan tidak terdefinisi.Membutuhkan modul http tidak pernah diperlukan.
Impor tambahan
http
tidak diperlukan dalam Express 3 atau 4. Menetapkan hasillisten()
sudah cukup.Sekali lagi, ini diuji dalam Express 3.5.1 & 4.0.0. Mengimpor
http
tidak pernah perlu. Metode mendengarkan mengembalikan objek server http. https://github.com/visionmedia/express/blob/master/lib/application.js#L531sumber
Dengan node.js terbaru (v0.3.8-pre): Saya memeriksa dokumentasi, memeriksa contoh server yang dikembalikan oleh http.createServer (), dan membaca kode sumber server.listen () ...
Sayangnya, port hanya disimpan sementara sebagai variabel lokal dan berakhir sebagai argumen dalam panggilan ke process.binding ('net') .bind () yang merupakan metode asli. Saya tidak melihat lebih jauh.
Tampaknya tidak ada cara yang lebih baik daripada menyimpan referensi ke nilai port yang Anda berikan ke server.listen ().
sumber
Cara paling sederhana untuk mengonversi dari gaya lama ke gaya baru (Express 3.x) adalah seperti ini:
Pra 3.x kerjanya seperti ini:
sumber
sumber
Saya juga bertanya pada diri sendiri pertanyaan ini, lalu saya datang ke halaman panduan Express 4.x untuk melihat contoh ini:
sumber
Anda bisa mendapatkan nomor port dengan menggunakan
server.address().port
seperti dalam kode di bawah ini:sumber
sumber
Jika Anda tidak menentukan nomor port dan Anda ingin tahu di port mana ia berjalan.
FYI, setiap kali itu akan berjalan di port yang berbeda.
sumber
The
findandbind
alamat NPM ini untuk mengekspresikan / restify / connect: https://github.com/gyllstromk/node-find-and-bindsumber
di bawah server http sederhana dan cara mendapatkan port mendengarkan
kemudian dapatkan port server dengan menggunakan:
sumber
sumber
Cara yang lebih mudah adalah dengan menelepon
app.get('url')
, yang memberi Anda protokol, sub domain, domain, dan port.sumber