Crostini - Node-сервер не работает на локальном хосте

У меня Pixelbook на Chrome 79. В моем терминале (Crostini) я запускаю простое приложение Express:

const express = require('express');
const app = express();

app.get('/', (req, res) => {
    res.send('Hello!');
});

const PORT = 8080;

app.listen(PORT, () => console.log(`Listening on port ${PORT}...`));

И попробуйте это в браузере на localhost:8080, и я получаю ошибку localhost refused to connect.

Если я использую инструмент Angular CLI для создания стандартного проекта Angular и использую ng serve, он сообщает мне, что он прослушивает localhost:4200, что я и пытаюсь сделать, и это действительно работает.

Какая разница? Как мне заставить мое приложение работать на локальном хосте?

Я чувствую, что у меня это работало в последний раз, когда я пробовал это пару месяцев назад, и теперь это просто не работает, и я не могу сказать, почему. Я пробовал использовать другие порты и перезагружать компьютер, и ничего не меняется.

Изменить: я видел демонстрацию Google о том, что переадресация портов должна работать автоматически здесь: https://youtu.be/pRlh8LX4kQI?t=1160 - но мне это не кажется.

Изменить 2: если я найду IP-адрес своего контейнера с ip addr show | grep inet (для меня это было 100.115.92.199) и попробую через порт 8080, он работает. Кроме того, я нашел человека на Reddit, сообщившего о той же проблеме (ссылка ). Поэтому я думаю, что автоматическая переадресация портов нарушена.


person Kenmore    schedule 09.01.2020    source источник
comment
работает для меня, как вы тестируете свой код? Вы также можете иметь console.log('received request') в своем обработчике для app.get('/'...) (прямо над или под res.send(), чтобы видеть, когда кто-то пытается подключиться к вашей странице.   -  person Jeremi G    schedule 09.01.2020
comment
Файл называется index.js, поэтому я нахожусь в каталоге и запускаю node .. Мое сообщение Listening... появляется, как и ожидалось. Я попытался добавить журнал, когда запрос получен, и он никогда не срабатывает.   -  person Kenmore    schedule 09.01.2020
comment
Таким образом, ваш запрос не достигает серверной части. Вероятно, это означает, что ваш компьютер не позволяет вашему index.js слушать и молча отрицает это.   -  person Jeremi G    schedule 09.01.2020
comment
Что ж, похоже, что порт на самом деле не перенаправляется из контейнера Linux в Chrome OS. У меня просто сложилось впечатление, что это делается автоматически - по крайней мере, я видел их демонстрацию (отредактированный пост со ссылкой) - так что, если это не работает, как должно, IDK, что делать.   -  person Kenmore    schedule 09.01.2020


Ответы (2)



В Chrome 80 улучшена интеграция сетевого интерфейса: попробуйте обновиться до бета-версии

  1. Перейти к настройкам
  2. В нижней части левой панели выберите О Chrome OS.
  3. Выберите «Подробная информация о сборке» или «Дополнительная информация».
  4. Рядом с «Канал» выберите «Изменить канал».
  5. Выберите «Бета»
person C. Reed    schedule 09.01.2020
comment
Я попробовал это, и теперь мой терминал вообще не работает. Он говорит: vmshell is not supported on this version of Chrome The command vmshell exited with status code 1. (R)econnect, (C)hoose another connection, or E(x)it? и первые 2 варианта ничего не делают. - person Kenmore; 10.01.2020
comment
Хорошо, найдено исправление: убедитесь, что у вас установлено и включено приложение Secure Shell: chrome.google.com/webstore/detail/secure-shell-app/ - person C. Reed; 10.01.2020
comment
После установки и перезапуска терминал работает. Однако порт моего приложения по-прежнему не перенаправляется на локальный хост. - person Kenmore; 10.01.2020