我正在关注本教程:
https://codingblast.com/chat-application-angular-socket-io/
一切正常,直到最后一步,与其他用户交流。
这是我的index.js:
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}`);
});
我故意将console.log留在那里,以查看消息是否仍在发送。
然后,这是我的app.component.ts:
import { Component } from '@angular/core';
import { ChatService } from '../chat.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
message: string;
messages: string[] = [];
constructor(private chatService: ChatService) {
}
sendMessage() {
this.chatService.sendMessage(this.message);
this.message = '';
}
ngOnInit() {
console.log('Starting...');
this.chatService
.getMessages()
.subscribe((message: string) => {
console.log('message sent');
this.messages.push(message);
});
}
}
我得到了console.log('Starting...');
,但它从未到达控制台中的console.log('message sent');
部分。
这里也是chat.service.ts:
import * as io from 'socket.io-client';
import { Observable } 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) => {
this.socket.on('new-message', (message) => {
observer.next(message);
});
});
}
}
我在这里没有发现任何问题。任何帮助将不胜感激。
答案 0 :(得分:1)
出问题的是您服务器中的io.emit
。您只传递了消息,但是io.emit
的第一个参数是事件。只需添加'new-message'
作为第一个参数,邮件就会到达您的客户端socket.on('new-message', ...
socket.on('new-message', (message) => {
console.log(message);
io.emit('new-message', message);
});