Bagaimana cara mengakses server NodeJS di LAN?

16

Saya bukan orang paling berpengetahuan luas dengan jaringan, tapi begini ...

Saya telah membuat aplikasi dengan NodeJS dan saya ingin menguji aplikasi pada LAN saya bersama keluarga saya. Aplikasi mendengarkan pada port 1337untuk koneksi dan saya dapat mengakses aplikasi dengan baik melalui PC saya sendiri dengan mengetik localhost:1337, 192.168.0.3:1337atau bahkan http://joel-pc:1337/ke bilah alamat browser saya.

Saya juga akan menjalankan apache bersama NodeJS, dan saya dapat mengakses denda ini dengan mengetik 192.168.0.3atau http://joel-pc/ke bilah alamat peramban asalkan terhubung ke jaringan yang sama.

Sekarang inilah bagian yang aneh; Jika saya menghentikan layanan apache, mengubah aplikasi node saya untuk mendengarkan pada port 80(http) insted 1337, itu akan dapat diakses di pc saya dengan mengetik localhost, 192.168.0.3atau bahkan http://joel-pcke bilah alamat browser saya. Namun, saya masih tidak dapat mengakses NodeJS di PC lain di jaringan saya selain dari milik saya.

Saya sudah mencoba membuat aturan keluar dalam Windows 7 untuk memungkinkan akses ke port 1337, tapi saya masih tidak bisa mendapatkan akses ke server NodeJS saya pada PC lain selain saya sendiri, bahkan jika itu mendengarkan pada port 80. Apakah ada sesuatu yang jelas Saya ketinggalan di sini?

Joel Murphy
sumber
2
Bagaimana jika, sebagai tes saja, Anda mematikan firewall Anda?
cheesemacfly
1
Jika saya mematikan firewall saya, saya dapat mengakses node dengan sempurna, terima kasih :) Tapi pasti ada cara yang lebih aman untuk melakukan sesuatu?
Joel Murphy
1
Saya sudah memasangnya kembali sekarang, jangan khawatir :) Haruskah saya memposting di sana juga? Atau adakah cara memindahkan pertanyaan saya? terima kasih
Joel Murphy
2
Bersulang. Saya menandainya juga karena saya membaca di utas lain bahwa itu perlu ditandai oleh 3 pengguna sebelum tindakan apa pun dilakukan oleh moderator
Joel Murphy
2
Bendera yang saya angkat telah dianggap membantu, jadi tidak yakin berapa lama waktu yang diperlukan!
cheesemacfly

Jawaban:

11

Kemungkinan besar aplikasi simpul Anda mengikat ke alamat IP loopback 127.0.0.1alih-alih "semua IP" 0.0.0.0karena ini adalah perilaku default listen. Tentukan port dan IP dalam panggilan seperti Anda server.listen(80, '0.0.0.0');dan coba lagi.

Peter Lyons
sumber
3
Jika saya melakukan ini, saya masih tidak dapat mengakses Node di perangkat lain di LAN saya. Kode saya terlihat seperti ini: var io = require ('socket.io'); var express = butuhkan ("express"); var app = express (); server var = membutuhkan ('http'). createServer (aplikasi) io = io.listen ('80 ',' 0.0.0.0 ');
Joel Murphy
2
Ini berhasil dalam kasus saya. Pada beberapa jaringan nirkabel localhostberfungsi sebagai string, tetapi pada yang lain Anda harus mengetiknya sebagai127.0.0.1
Raul Rene
Ini tidak benar mengingat pertanyaan yang ditulis saat ini, karena sebenarnya dapat diakses di komputer lokal menggunakan alamat LAN, yang berarti mendengarkan pada alamat itu juga.
Arlen Beiler
6

Dapatkan Anda IP jaringan lokal saat ini dan, jalankan http server seperti ini:

server.listen(80, 'current_local_ip');
Gonzalo Bahamondez
sumber
1
ini bekerja untuk saya.
psulek
Dokumen NodeJS menyatakan bahwa jika tidak ada IP yang ditentukan, ia akan mendengarkan pada wildcard (dalam urutan: ::atau 0.0.0.0)
Arlen Beiler
3

Pertama, Anda perlu menambahkan C:\Program Files (x86)\nodeke daftar aplikasi tepercaya di firewall Anda.

Kemudian, di aplikasi simpul Anda, Anda dapat menulis:

listen(3333, '172.24.14.26', function() {

atau:

listen(3333, '0.0.0.0', function() {

atau:

listen(3333, function() {

atau:

listen(80, '172.24.14.26', function() {

atau:

listen(80, '0.0.0.0', function() {

atau:

listen(80, function() {

Masing-masing dari 6 kombinasi ini berfungsi dalam kasus saya: node.js di Windows Server 2016, dilindungi oleh proksi perusahaan.

Michael Bernheiden
sumber
3

Melakukan hal berikut berfungsi untuk saya di PC windows. Coba ini: buka

Control Panel \ System and Security \ Windows Defender Firewall \ Diizinkan aplikasi

Selanjutnya cari node.js dalam daftar dan klik ubah pengaturan> Pastikan akses pribadi dicentang dan kemudian klik ok.

Guntur
sumber
3

Saya menemukan solusi yang bagus untuk masalah ini. Daripada melakukan semua konfigurasi (Pengaturan firewall, port forwarding dll) Saya menggunakan localtunnel yang merupakan utilitas untuk mengekspos server node lokal melalui Internet. Anda dapat menggunakannya untuk pengembangan, pengujian, tujuan berbagi, hanya saja jangan menggunakannya untuk produksi.

Pertama, Anda harus menginstal localtunnel sebagai berikut:

$npm install -g localtunnel

Setelah itu konfigurasikan aplikasi simpul Anda sehingga server simpul Anda harus berjalan di localhost. Misalnya:

server.listen(3000, function () {
console.log('Listening to port:  ' + port);
});

Catat your_port yang dalam kasus saya adalah 3000 , dan mulai server node Anda.

Buka terminal lain dan ketik perintah berikut untuk menjalankan localtunnel.

$lt --port 3000

Setelah ini, di terminal Anda akan mendapatkan URL yang dapat Anda gunakan untuk tujuan pengembangan / pengujian. URL ini akan tersedia di Internet sehingga Anda dapat membaginya dengan orang lain juga. Selama saluran lokal Anda berjalan, orang lain dapat mengakses server simpul lokal Anda.

Untuk opsi / bantuan konfigurasi lebih lanjut, Anda dapat melihat dokumentasi: https://www.npmjs.com/package/localtunnel

k33da_lets_debug
sumber