У меня есть приложение SpringBoot, в котором я настроил WebSocket, к которому могу подключиться с помощью Postman. У меня это есть на ws://localhost:8050. Только с одним пространством имен «сокет».
Я попытался настроить собственный угловой веб-сокет и простое подключение, но столкнулся с внутренней ошибкой сервера.
[
]
Я попытался создать соединение WebSocket следующим образом.
this.socket = new WebSocket("ws://localhost:8050/socket")
Я не импортирую для этого конструктора какую-либо библиотеку типа «ws», это просто собственная библиотека.
Я получаю эту ошибку.
[vite] Internal server error: WebSocket is not defined
Я ожидаю, что смогу подключиться к серверу.
Специально я его не настраивал. Но я вижу, что после создания проекта добавлено несколько зависимостей. Например. У меня это есть в моем server.ts. импортировать {CommonEngine} из '@angular/ssr'; Но в моем angular.json у меня есть это: "development": { ... "ssr": false }





Когда вы работаете с SSR. Вам необходимо запретить инструментам рендеринга или сборки на стороне сервера выполнять код WebSocket.
Я бы предложил проверить, доступен ли объект окна перед инициализацией WebSocket.
if (typeof window !== 'undefined') {
this.socket = new WebSocket("ws://localhost:8050/socket");
}
Это гарантирует, что WebSocket будет создан только в среде браузера.
Или вы можете работать с идентификатором платформы и isPlatformBrowser. Это лучший пример для Angular, в отличие от первого, который больше похож на JS.
import { Component, OnInit, Inject, PLATFORM_ID } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';
@Component({
// Your html, scss etc...
})
export class MyComponent implements OnInit {
private isBrowser: boolean;
constructor(@Inject(PLATFORM_ID) private platformId: Object) {
this.isBrowser = isPlatformBrowser(this.platformId);
}
ngOnInit() {
if (this.isBrowser) {
// Connect to WebSockets here
} else {
// Work without websockets or do nothing
}
}
}
При таком подходе ваше приложение Angular должно правильно различать серверную среду и среду браузера и пытаться использовать WebSockets только в браузере.
вы используете SSR в своем угловом приложении?