node.js - 无法使用 socketid 发出事件
问题描述
我正在尝试为套接字 io 编写集成测试。当错误被捕获时,我正在对服务器事件使用 try-catch 我为客户端发出一个事件来处理错误
io.of('/rooms').on('connection', socket => {
const socketId = socket.id;
console.log('server socketid', socketId);
const userRepository = getCustomRepository(UserRepository);
const conversationToUserRepository = getCustomRepository(ConversationToUserRepository);
socket.on('initGroupChat', async (users_id, fn) => {
try {
const [user, listConversationToUser] = await Promise.all([
userRepository.findOne({
where: {
users_id,
},
}),
conversationToUserRepository.find({
where: {
users_id,
},
}),
]);
if (!user) {
throw new NotFoundError('User not found with id: ' + users_id);
}
console.log(2);
user.socket_id = socket.id;
await userRepository.save(user);
for (const item of listConversationToUser) {
socket.join(item.conversation_id.toString());
}
fn('init group chat success');
} catch (error) {
io.to(socketId).emit('error', errorHandlerForSocket(error));
console.log(10);
}
});
});
但在套接字客户端上,什么也没有发生。这是代码套接字客户端:
it.only('Init Group Chat with error', done => {
socket = io.connect(`http://localhost:${env.app.port}/rooms`, {
transports: ['websocket']
});
const id = 11111;
socket.emit('initGroupChat', id, (response: any) => {
console.log('response', response);
});
socket.on('error', (error: any) => {
console.log('error3', error);
done();
});
});
在错误事件中,console.log 未在终止时显示。它没有捕捉到我在服务器上发出的事件。
谁能帮我解决这个问题
解决方案
每次客户端刷新 socketId 发生变化。
服务器 :
io.emit("send_to_client", {
userId: 112233,
data: "Hello user 112233"
});
客户 :
var userLogin = 112233;
socket.on("send_to_client", function(res) {
if(res.userId === userLogin)
//somethingElse
});
推荐阅读
- .htaccess - .htaccess 拒绝通过(部分)IP 范围访问登录页面?
- c# - 如何将数据库表中的数据添加到列表中并在“CategoryPicker”中显示
- esper - 每次 Id 提高的值超过 1 时,Esper EPL 语句
- node.js - 北资科技Transact API的实现
- c# - await HttpClient.SendAsync 没有响应
- excel - 比较vba中的字符串用于excel的问题
- c# - 一个视图中的多个模型 .NET Core
- sql - 如何在firebird中修改我的sql,添加两个日期,每个日期都来自其他表?
- azure - Azure 文件存储 - 访问策略标识符
- c++ - 查找使用给定行向量和以最大形式排列的二进制矩阵的列向量和