Saya menguji aplikasi (mudah-mudahan berjalan di heroku, tetapi saya juga punya masalah di tempat). Ini memberi saya kesalahan EACCES ketika menjalankan http.Server.listen () - tetapi itu hanya terjadi pada beberapa port.
Jadi, secara lokal saya menjalankan:
joe@joebuntu:~$ node
> var h = require('http').createServer();
> h.listen(900);
Error: EACCES, Permission denied
at Server._doListen (net.js:1062:5)
at net.js:1033:14
at Object.lookup (dns.js:132:45)
at Server.listen (net.js:1027:20)
at [object Context]:1:3
at Interface.<anonymous> (repl.js:150:22)
at Interface.emit (events.js:42:17)
at Interface._onLine (readline.js:132:10)
at Interface._line (readline.js:387:8)
at Interface._ttyWrite (readline.js:564:14)
Saya tidak memiliki apa pun yang berjalan di port 900 (atau salah satu dari 20 port lain yang pernah saya coba), jadi ini seharusnya berfungsi. Bagian aneh adalah bahwa hal itu tidak bekerja pada beberapa port. Misalnya, port 3000 berfungsi dengan baik.
Apa yang menyebabkan ini?
Pembaruan 1:
Saya menemukan bahwa di komputer lokal saya, kesalahan EACCES akan datang karena saya harus menjalankan simpul sebagai root untuk mengikat port-port tertentu. Saya tidak tahu mengapa ini terjadi, tetapi menggunakan sudo memperbaikinya. Namun, ini tidak menjelaskan bagaimana saya akan memperbaikinya di Heroku. Tidak ada cara untuk menjalankan sebagai root pada Heroku, jadi bagaimana saya bisa mendengarkan pada port 80?
sumber
Jawaban:
Berjalan di workstation Anda
Sebagai aturan umum, proses yang berjalan tanpa hak akses root tidak dapat mengikat ke port di bawah 1024.
Jadi cobalah port yang lebih tinggi, atau jalankan dengan privilege yang ditingkatkan via
sudo
. Anda dapat menurunkan versi keistimewaan setelah Anda terikat ke port rendah menggunakanprocess.setgid
danprocess.setuid
.Berjalan di heroku
Saat menjalankan aplikasi Anda di heroku Anda harus menggunakan port seperti yang ditentukan dalam variabel lingkungan PORT.
Lihat http://devcenter.heroku.com/articles/node-js
sumber
crossdomain.xml
melalui port 843.Pengguna yang tidak memiliki hak istimewa (bukan root) tidak dapat membuka soket pendengaran pada port di bawah 1024.
sumber
sudo
ketika menjalankan server ekspres menggunakan node (tegukan sebenarnya). Jadi tidak masuk akalPeriksa tautan referensi ini :
sumber
pm2 kill
dan membuatnya kembali.Pendekatan lain adalah dengan melakukan redirection port:
Dan jalankan server Anda di> port 1024:
ps hal yang sama dapat dilakukan untuk https (443) port by the way.
sumber
Ini berarti simpul tidak dapat mendengarkan pada port yang ditentukan. Ubah ke sesuatu seperti 1234 atau 2000 atau 3000 dan mulai ulang server Anda.
sumber
OH TUHAN!! Dalam kasus saya, saya
....listen(ip, port)
malah melakukan...listen(port, ip)
dan itu memunculkan pesan kesalahan:Error: listen EACCES localhost
Saya menggunakan nomor port> = 3000 dan bahkan mencoba dengan akses admin. Tidak ada yang berhasil. Kemudian dengan relook yang lebih dekat, saya perhatikan masalahnya. Mengubahnya
...listen(port, ip)
dan semuanya mulai bekerja dengan baik !!Hanya menyebut ini kalau-kalau berguna bagi orang lain ...
sumber
....listen(ip, port)
menjawab (dengan empat.
)? Butuh satu menit untuk menyadari Anda berbicara tentang urutan argumen karena itu.....
(empat titik) di sana, yang saya pikir sudah jelas.Saya mendapatkan kesalahan ini di mac saya karena menjalankan apache server secara default menggunakan port yang sama dengan yang digunakan oleh server node yang dalam kasus saya adalah port 80. Yang harus saya lakukan adalah menghentikannya dengan
sudo apachectl stop
Semoga ini bisa membantu seseorang.
sumber
Saya mendapat kesalahan ini di mac saya juga. Saya gunakan
npm run dev
untuk menjalankan aplikasi Nodejs saya di Windows dan berfungsi dengan baik. Tapi saya mendapat kesalahan ini di mac saya -error given was: Error: bind EACCES null:80
.Salah satu cara untuk mengatasinya adalah dengan menjalankannya dengan akses root. Anda dapat menggunakan
sudo npm run dev
dan membutuhkan kata sandi Anda.Pada umumnya lebih disukai untuk melayani aplikasi Anda pada port yang tidak memiliki hak istimewa, seperti 3000, yang akan berfungsi tanpa izin root.
referensi: Kesalahan Node.js EACCES saat mendengarkan di port http 80 (izin ditolak)
sumber
Aku punya masalah yang sama bahwa itu menyangkal untuk berjalan pada port 8080, tetapi juga setiap lainnya.
Ternyata, itu karena
env.local
file yang dibacanya berisi komentar setelah nama variabel seperti:Dan itu menafsirkannya seperti itu, mencoba menggunakan port "
8080 # The port the server runs at
", yang jelas merupakan port yang tidak valid (-1). Menghapus komentar sepenuhnya menyelesaikannya.Omong-omong, menggunakan Windows 10 dan Git Bash.
Aku tahu itu tidak persis masalah yang dijelaskan di sini, tetapi mungkin membantu seseorang di luar sana. Saya mendarat di pertanyaan ini mencari masalah untuk jawaban saya, jadi ... mungkin?
sumber
Ingatlah jika Anda menggunakan sudo untuk mengikat port 80 dan menggunakan variabel env PORT & NODE_ENV Anda harus mengekspor kembali vars tersebut karena Anda sekarang berada di bawah profil root dan bukan profil pengguna Anda. Jadi, agar ini berfungsi di Mac saya, saya melakukan hal berikut:
sumber
ini terjadi jika port yang Anda coba host secara lokal portfowarded
sumber
Coba authbind:
http://manpages.ubuntu.com/manpages/hardy/man1/authbind.1.html
Setelah menginstal, Anda dapat menambahkan file dengan nama nomor port yang ingin Anda gunakan di folder berikut: / etc / authbind / byport /
Berikan 500 izin menggunakan chmod dan ubah kepemilikan ke pengguna yang Anda inginkan untuk menjalankan program.
Setelah itu, lakukan "authbind node ..." sebagai pengguna di proyek Anda.
sumber
Kesalahan saya teratasi hanya dengan mengubah nomor port di server.js Khususnya di baris ini
Saya mengubah nomor port saya menjadi 8085 dari 8080.
Semoga ini bisa membantu.
sumber
Setelah mencoba berbagai cara, menginstal ulang IIS di windows saya memecahkan masalah.
sumber
Kesalahan saya diselesaikan menggunakan (Pada Windows)
Izinkan aplikasi NodeJS untuk mengakses jaringan di Windows Firewall.
sumber
restart tidak cukup! Satu-satunya cara untuk memecahkan masalah adalah dengan yang berikut:
Anda harus mematikan layanan yang berjalan di port itu.
di cmd, jalankan sebagai admin, lalu ketik: netstat -aon | temukan / saya "mendengarkan"
maka Anda akan mendapatkan daftar dengan layanan aktif, mencari port yang berjalan pada 4200 dan menggunakan proses id yang merupakan kolom terakhir untuk membunuhnya dengan
: taskkill / F / PID 2652
sumber