Tôi đang thử nghiệm một ứng dụng (hy vọng sẽ chạy trên heroku, nhưng cũng gặp vấn đề cục bộ). Nó gây ra lỗi EACCES cho tôi khi chạy http.Server.listen () - nhưng nó chỉ xảy ra trên một số cổng.
Vì vậy, tại địa phương tôi đang chạy:
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)
Tôi không có bất cứ thứ gì chạy trên cổng 900 (hoặc bất kỳ trong số 20 cổng khác mà tôi đã thử), vì vậy điều này sẽ hoạt động. Phần lạ là nó không làm việc trên một số cổng. Ví dụ, cổng 3000 hoạt động hoàn hảo.
Điều gì sẽ gây ra điều này?
Cập nhật 1:
Tôi đã tìm ra rằng trên máy tính cục bộ của tôi, lỗi EACCES đang đến vì tôi phải chạy nút dưới dạng root để liên kết với các cổng nhất định đó. Tôi không biết tại sao điều này xảy ra, nhưng sử dụng sudo sẽ sửa nó. Tuy nhiên, điều này không giải thích cách tôi sẽ sửa nó trên Heroku. Không có cách nào để chạy bằng root trên Heroku, vậy làm thế nào tôi có thể nghe trên cổng 80?