У мене на сервері працює програма Node.js / Express.js, яка працює лише на порту 3000, і я намагаюся зрозуміти, чому. Ось що я знайшов:
- Без зазначення порту (
app.listen()
) програма працює, але веб-сторінка не завантажується. - На порту 3001 (
app.listen(3001)
) або будь-якому іншому порту, який не використовується, програма працює, але веб-сторінка не завантажується. - На порту 2999 додаток видає помилку, оскільки щось інше використовує цей порт.
- На порту 3000 програма працює, і веб-сторінка завантажується нормально.
Я знаю, що Express-програми за замовчуванням портують 3000. Але дивно, що моя програма працює лише тоді, коли я явно змушую її працювати на порту 3000 ( app.listen(3000)
).
Я знайшов це в рядку 220 із /usr/bin/express
:
app.set(\'port\', process.env.PORT || 3000);
Що робиться, як було зазначено раніше: встановлення порту до вказаного або до 3000, якщо нічого не вказано.
Як я можу змусити свою програму працювати на іншому порту, такому як 8080 або 3001?
Дякую!
Редагувати: зразок коду (дуже простий вузол / програма Express)
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);
.listen()
. Вище, коли я кажу: "додаток працює", це те саме, що ви говорите, "відсутність помилок під час запуску програми". Коли я кажу, "веб-сторінка не завантажується", це те саме, що ви говорите, "недоступна з браузера". Весь доступ з тієї ж машини (мого сервера). Дякуємо за відгук.
$ supervisor app.js
або $ PORT=[PORT] node app.js
коли хочу встановити змінну порту середовища. Я викладу зразок коду.
port
вимагається.listen()
, тому вам не слід намагатись обійтись. 2) Чи виникають помилки під час запуску програми? Або це просто здається недоступним із браузера? 3) Ви намагаєтеся отримати доступ до веб - сайт на одній машині зlocalhost:3000
,localhost:3001
і так далі? Якщо ви використовуєте дві машини, один клієнт та один сервер, вам потрібно буде додати винятки до брандмауера на сервері, щоб дозволити Node отримувати запити від клієнта.