【问题标题】:NodeJS Angular 8 chat application not receiving messages in clientNodeJS Angular 8聊天应用程序未在客户端接收消息
【发布时间】:2020-06-21 05:09:52
【问题描述】:

我制作了一个 NodeJS 服务器和一个 Angular 8 客户端来使用 socket.io 发送和接收消息。服务器确实接收到消息但不发送/角度不接收消息。发生这种情况是因为我使用了 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}`);
});

角度服务:

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();
            });
        });
    }
}

角度组件:

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 {
}

【问题讨论】:

  • 你是否在 UI 中向用户显示消息我的意思是 HTML 模板
  • @RajaShekar 不,我只是想登录控制台,正如您在代码中看到的那样

标签: node.js angular sockets socket.io


【解决方案1】:

在您的服务器代码中,您编写了io.emit(message);,但使用两个参数调用发出函数 - 事件名称和要发送的消息。

将其更改为io.emit('new-message', message);,它应该可以工作。

【讨论】:

    【解决方案2】:

    您需要将io.emit(message) 更改为io.emit("message", { message: message })

    这段代码对我有用。

    【讨论】:

    • 您可以edit您的帖子,而不是删除和重新发布
    猜你喜欢
    • 2012-06-04
    • 1970-01-01
    • 2015-03-28
    • 2019-09-27
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多