Saya memiliki aplikasi Node.js / Express.js yang berjalan di server saya yang hanya berfungsi pada port 3000 dan saya mencoba mencari tahu alasannya. Inilah yang saya temukan:
- Tanpa menentukan port (
app.listen()
), aplikasi berjalan tetapi halaman web tidak memuat. - Pada port 3001 (
app.listen(3001)
) atau port lain yang tidak digunakan, aplikasi berjalan tetapi halaman web tidak dimuat. - Pada port 2999, aplikasi melontarkan kesalahan karena ada hal lain yang menggunakan port itu.
- Pada port 3000, aplikasi berjalan dan halaman web dimuat dengan baik.
Saya tahu bahwa aplikasi Express secara default menggunakan port 3000. Tapi anehnya, aplikasi saya hanya berjalan ketika saya secara eksplisit membuatnya berjalan pada port 3000 ( app.listen(3000)
).
Saya menemukan ini di baris 220 dari /usr/bin/express
:
app.set(\'port\', process.env.PORT || 3000);
Yang melakukan seperti yang dinyatakan sebelumnya: mengatur port ke apa yang ditentukan atau ke 3000 jika tidak ada yang ditentukan.
Bagaimana saya dapat membuat aplikasi saya berfungsi pada port yang berbeda seperti 8080 atau 3001?
Terima kasih!
Edit: Contoh Kode (Aplikasi Node / Ekspres Sangat Sederhana)
var express = require("express");
var app = express();
app.get('/', function(req, res){
res.send('hello world');
});
// Only works on 3000 regardless of what I set environment port to or how I set [value] in app.set('port', [value]).
app.listen(3000);
javascript
node.js
configuration
express
port
Benjamin Martin
sumber
sumber
port
diperlukan oleh.listen()
, jadi Anda tidak boleh mencoba tanpa. 2) Apakah Anda mendapatkan kesalahan saat menjalankan aplikasi? Atau apakah itu hanya tampak tidak dapat diakses dari browser? 3) Apakah Anda mencoba untuk mengakses situs web pada mesin yang sama denganlocalhost:3000
,localhost:3001
, dll? Jika Anda menggunakan dua mesin, satu klien dan satu server, Anda harus menambahkan pengecualian ke firewall di server untuk mengizinkan Node menerima permintaan dari klien..listen()
. Di atas ketika saya mengatakan, "aplikasi berjalan", ini sama dengan yang Anda katakan, "tidak ada kesalahan saat menjalankan aplikasi". Saat saya berkata, "halaman web tidak dimuat", ini sama dengan yang Anda katakan, "tidak dapat diakses dari browser". Semua akses dari mesin yang sama (server saya). Terima kasih untuk umpan baliknya.$ supervisor app.js
atau$ PORT=[PORT] node app.js
ketika saya ingin mengatur variabel port lingkungan. Saya akan memberikan contoh kode.Jawaban:
Berikut ini cara kerja jika Anda memiliki sesuatu seperti ini di app.js Anda:
Entah secara eksplisit melakukan hardcode kode Anda untuk menggunakan port yang Anda inginkan, seperti:
Kode ini berarti setel port Anda ke variabel lingkungan
PORT
atau jika ituundefined
kemudian setel ke literal3000
.Atau, gunakan lingkungan Anda untuk mengatur port. Mengaturnya melalui lingkungan digunakan untuk membantu menggambarkan antara
PRODUCTION
danDEVELOPMENT
dan banyak Platform sebagai Layanan menggunakan lingkungan untuk mengatur port sesuai dengan spesifikasi mereka serta konfigurasi Express internal. Berikut ini menetapkan pasangan kunci = nilai lingkungan dan kemudian meluncurkan aplikasi Anda.Mengacu pada contoh kode Anda, Anda menginginkan sesuatu seperti ini:
sumber
app.set()
kode ke dalam aplikasi saya dan ubah 3000 menjadi 8080. Masih hanya berfungsiapp.listen(3000)
. 2. Ubah variabel port lingkungan menjadi 8080 saat menjalankan aplikasi node. Masih hanya berfungsiapp.listen(3000)
. 3. Beralih ke / usr / bin / express (baris 220) dan ubah 3000 menjadi 8080. Masih hanya berfungsiapp.listen(3000)
. Terima kasih atas posting informatifnya. Apakah ada yang perlu saya mulai ulang? Express tidak dapat dimulai ulang dari apa yang dapat saya katakan dan memulai ulang aplikasi Node terjadi setiap kali saya menggunakannode app.js.
node app.js
akan memulainya (saya pribadi gunakannodemon
saat mengembangkan dan menguji. Apa yang mungkin Anda pikirkan adalah barisexpress
perintah yang dapat dieksekusi yang merupakan proses pembantu yang membangun kerangka Anda struktur file. Dapatkah Anda memposting inti kode Anda?nodemon
dalam hubungannya dengannohup
untuk menjaga aplikasi saya berjalan tanpa batas. Saya tidak menggunakan versi CL yang dapat dieksekusiexpress
jadi harus dimulai ulang setiap kali saya memulai ulangnode
aplikasi saya . Lihat posting asli saya untuk mengedit dengan kode. Terima kasih!Di
bin/www
, ada garis:Cobalah untuk memodifikasinya.
sumber
Coba ini
sumber
Coba cari lokasi bin> www dan coba ubah nomor port ...
sumber
Cara default untuk mengubah port mendengarkan di kerangka kerja Express adalah dengan mengubah file bernama www di folder bin.
Di sana, Anda akan menemukan garis seperti berikut ini
Ubah nilai 3000 ke port mana pun yang Anda inginkan.
Ini berlaku untuk Express versi 4.13.1
sumber
Sekadar catatan untuk pengguna Mac OS X dan Linux:
Jika Anda ingin menjalankan aplikasi Node / Express Anda pada nomor port yang lebih rendah dari 1024, Anda harus menjalankan sebagai superuser:
sudo PORT=80 node app.js
sumber
Dalam versi kode terbaru dengan generator ekspres (4.13.1) app.js adalah modul yang diekspor dan server dimulai di / bin / www menggunakan app.set ('port', process.env.PORT || 3001) di app.js akan diganti dengan pernyataan serupa di bin / www. Saya baru saja mengubah pernyataan di bin / www.
sumber
Perhatikan bahwa ini tidak pernah diselesaikan ... Anda mungkin memiliki firewall di depan mesin Anda yang memblokir port tersebut, atau iptables disiapkan untuk mencegah penggunaan port tersebut.
Coba jalankan nmap -F localhost saat Anda menjalankan aplikasi (instal nmap jika Anda tidak memilikinya). Jika tampaknya Anda menjalankan aplikasi di port yang benar dan Anda tidak dapat mengaksesnya melalui browser jarak jauh, maka ada beberapa middleware atau firewall fisik yang memblokir port tersebut.
Semoga ini membantu!
sumber
Baris yang Anda temukan hanya mencari variabel lingkungan
PORT
, jika ditentukan, ia akan menggunakannya, jika tidak menggunakan port default3000
. Anda harus menentukan variabel lingkungan ini terlebih dahulu (tidak perlu menjadi root)sumber
Jika Anda ingin menunjukkan sesuatu yang terhubung pada 3000
Saya harap itu akan membantu Anda
sumber
Jawab menurut versi ekspres saat ini
Jika Anda berbicara tentang versi ekspres saat ini , jika Anda menjalankan
app.listen()
untuk mulai mendengarkan tanpa menentukan port, Express akan memilih port acak untuk aplikasi Anda, untuk mencari tahu tentang port mana yang saat ini dijalankan saat digunakanHaruskah keluaran yang pelabuhan dari Anda
app
. Selain itu, parameter pertama0
dapat diabaikan sama sekali tetapi tidak direkomendasikansumber
Pastikan Anda menjalankan dari folder aplikasi Anda, di mana Anda memiliki package.json.
sumber
Saya menggunakan
minimist
paket dan argumen permulaan node untuk mengontrol port.node server.js --port 4000
atau
node server.js -p 4000
Di dalam server.js, port dapat ditentukan oleh
dan defaultnya ke 3000 jika tidak ada port yang dilewatkan sebagai argumen.
Anda kemudian dapat menggunakan mendengarkan pada
port
variabel.sumber
Di app.js, cukup tambahkan ...
Ini akan mengisolasi variabel PORT ke aplikasi ekspres.
sumber
Menurut saya cara terbaik adalah dengan menggunakan paket dotenv dan mengatur port pada
.env
file config tanpa mengubah filewww
di dalam folderbin
.Cukup instal paket dengan perintah:
membutuhkannya di aplikasi Anda:
Buat file .env di direktori root proyek Anda, dan tambahkan port di dalamnya (misalnya) untuk mendengarkan pada port 5000
dan hanya itu.
Info selengkapnya di sini
sumber
Jika Anda menggunakan Nodemon, tebakan saya adalah PORT 3000 diatur di nodemonConfig. Periksa apakah itu masalahnya.
sumber