NodeJS Angular 8 чат-приложение не получает сообщения в клиенте - PullRequest
0 голосов
/ 09 марта 2020

Я создал сервер NodeJS и клиент Angular 8 для отправки и получения сообщений с помощью socket.io. Сервер получает сообщение, но не отправляет / angular не получает сообщение. Это происходит потому, что я использую localhost или я сделал что-то не так в коде?

NodeJS сервер:

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

let http = require('http');
let server = http.Server(app);

let socketIO = require('socket.io');
let io = socketIO(server);

const port = process.env.PORT || 3000;

io.on('connection', (socket) => {
    console.log('user connected');

    socket.on('new-message', (message) => {
        console.log(message);
        io.emit(message);
    });
});

server.listen(port, () => {
    console.log(`started on port: ${port}`);
});

Angular service:

import * as io from 'socket.io-client';
import { Observable } from 'rxjs/Observable';
import {Observer} from 'rxjs';

export class ChatService {
    private url = 'http://localhost:3000';
    private socket;

    constructor() {
        this.socket = io(this.url);
    }

    public sendMessage(message) {
        this.socket.emit('new-message', message);
    }

    public getMessages = () => {
        // return Observable.create((observer) => {
        //     console.log(observer);
        //     this.socket.on('new-message', (message) => {
        //         observer.next(message);
        //     });
        // });
        return new Observable((observer) => {
            this.socket.on('new-message', (message) => {
              observer.next(message);
              observer.complete();
            });
        });
    }
}

Angular компонент:

export class HomeComponent implements OnInit {
    private message: string;

    constructor(private chatService: ChatService) {
        this.message = 'hello';
        this.sendMessage();
    }

    ngOnInit(): void {
        this.chatService.getMessages().subscribe((message: string) => {
            console.log(message);
        }, err => {
            console.log(err);
        });
    }

    sendMessage() {
        this.chatService.sendMessage(this.message);
    }
}

App.module.ts:

@NgModule({
    declarations: [
        AppComponent,
        HomeComponent
    ], imports: [
    ], providers: [
        ChatService
    ], entryComponents: []
})
export class AppModule {
}

1 Ответ

0 голосов
/ 09 марта 2020

В коде вашего сервера вы написали io.emit(message);, но функция emit вызывается с двумя параметрами - именем события и сообщением для отправки.

Измените его на io.emit('new-message', message);, и оно должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...