Разъяснение по поводу nodeJS

Я только начинаю изучать nodeJS, а также следую руководству по базовому чату socket.io. У меня есть вопросы, я уверен, что они кажутся невежественными, но я действительно хочу их понять:

1) nodeJS например "слушает" localhost:8080. Но допустим, я хочу, чтобы чат socket.io был на определенной странице: localhost/chat.html, как мне заставить эту систему чата работать на localhost/chat.html, а не на localhost:8080 (так что пользователь нажимает ссылку "chat.html", и сервер чата запускается только тогда, когда находится на этой странице)

2) Для чата я хочу разрешить только зарегистрированным и вошедшим в систему пользователям просматривать эту страницу localhost / chat.html. С PHP я бы просто проверил, установлен ли сеанс с помощью isset $_SESSION, и получил идентификатор пользователя из этого сеанса, как я могу запустить сеанс с помощью PHP с файлом nodeJS?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
27
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

how do I make that chat system to work on localhost/chat.html, and not on localhost:8080

Порт по умолчанию для HTTP - 80. http://localhost/ подразумевает http://localhost:80/. Если хотите, вы можете заставить Node.js прослушивать порт 80.

(so that a user clicks on "chat.html" link and the chat server starts only when in that page)

Что ж, эта часть вопроса - ерунда. Сервер должен быть запущен, чтобы он был доступен для получения запроса при его поступлении.

With PHP I would simply check if a session is set using isset $_SESSION and get the id of the user from that session, how can I get the session started by PHP, with the nodeJS file?

Сеансы PHP обычно работают через cookie. Вы также можете использовать файлы cookie в своем приложении Node.js. Чтобы упростить себе задачу, подумайте об установке Express и одного из множества обработчиков данных сеанса, которые подключаются к нему как к модулю.

Понятно, но все еще что-то неясно: теперь сервер прослушивает localhost: 80, хорошо, но я не хочу, чтобы сам чат запускался только тогда, когда пользователь вводит в адресную строку "localhost: 80". Я хочу, чтобы слушатель обнаруживать события, когда пользователь фактически переходит по ссылке chat.html, а не по адресу с портом (пример: мой файл чата находится по адресу localhost / chat-system / chat.html)

user9644796 01.05.2018 23:46

Вы путаете прослушивание (привязку к сетевому адресу и порту) и маршрутизацию HTTP-пути. Они совершенно не связаны. На каком хостинге размещается ваша статическая страница чата?

Brad 01.05.2018 23:53

Определенно, просто я впервые использую nodeJS. Проблема в том, что я никогда не занимался этим. Даже учебник по чату socket.io запускает чат, только когда вы вводите localhost: 8080 в адресной строке, что мне нужно сделать, чтобы он работал, когда вы вместо этого набираете localhost / chat.html (при условии, что там находится файл чата) ? Как вы маршрутизируете его в узле?

user9644796 01.05.2018 23:55

Какое отношение Socket.IO имеет к вашей статической странице чата? Я понятия не имею, каковы ваши текущие настройки. Вы вообще не вдавались в подробности. Я еще раз спрашиваю, на каком хостинге размещена ваша текущая страница? Вы говорите, что уже позаботились о маршрутизации, и это на /chat-system/chat.html. Итак, просто измените это и сделайте /chat.html? Я не понимаю вашего вопроса.

Brad 01.05.2018 23:57

Я следую их руководству на socket.io/get-started/chat, и это настройка, они не объясняют, как заставить его работать, когда вы напрямую переходите на localhost / chat-example / index.html (это где HTML и CSS чата), но вместо этого вы необходимо ввести localhost: 8080 (если я напрямую наберу localhost / chat-example / index.html - тогда события не будут прослушиваться, вы увидите, что в консоли ничего не происходит)

user9644796 01.05.2018 23:59

Как я уже сказал вам, если вы измените свой сервер на прослушивание порта 80, вы можете использовать неявный порт 80 в URL ... http://localhost/. Что касается маршрутизации, в этом руководстве вы используете Express. Маршрут по умолчанию настроен с помощью app.get('/', ..., и он жестко запрограммирован для отправки index.html, который является файлом, который вы создали. Вы можете просто заменить / на /chat.html, а затем я бы тоже переименовал файл. А еще лучше использовать статическое промежуточное ПО Express. (Прочтите документацию по Express, чтобы узнать, как это использовать. expressjs.com/en/starter/static-files.html)

Brad 02.05.2018 00:02

Сделаю, спасибо за помощь! (Сначала не понимал, что вы имели в виду, что когда вы ссылались на порт 80, кстати, только порт 80 является неявным? Так что, даже если я чатаю '/' в 'chat.html', мне нужно будет ввести localhost / chat.html : 8080, а если я не поменяю на 80?

user9644796 02.05.2018 00:03

Позвольте нам продолжить обсуждение в чате.

user9644796 02.05.2018 00:05

@pileup Нет, это работает совсем не так. Перед тем, как продолжить работу с приложением, вам следует ознакомиться с частями URL-адреса и основами HTTP. Если ваше приложение прослушивает порт 80, и у вас есть маршрут для /chat.html, вы можете использовать http://localhost/chat.html в качестве URL-адреса. Если вы слушаете порт 8080, URL будет http://localhost:8080/chat.html. Это [протокол] [хост] [порт] [путь] [строка запроса].

Brad 02.05.2018 00:06

Я плохо отношусь к путанице с расположением порта, очевидно, мне нужно больше исследований (я новичок, как вы уже догадались), но более важно то, что только порт 80 позволяет вам быть неявным! Таким образом, вы не можете быть гибкими, если хотите «более приятного» взаимодействия с пользователем - если вы не хотите, чтобы пользователи видели числа в адресной строке, вы должны использовать порт 80? (Или иначе испортите конфигурацию сервера / файлы htaccess)

user9644796 02.05.2018 00:12

@pileup Да, вы должны использовать порт 80 для HTTP. Не то чтобы браузер мог читать ваши мысли относительно того, к какому порту вы хотите подключиться. Записи DNS SRV так и не стали частью HTTP. Почему это проблема?

Brad 02.05.2018 00:22

Другие вопросы по теме