【问题标题】:How to loop through messages from mysql database and display them correctly如何遍历来自mysql数据库的消息并正确显示它们
【发布时间】:2017-10-09 06:00:36
【问题描述】:

我正在构建一个聊天程序。

每次用户发送消息时,它都会存储在一个名为“消息”的表中。该表如下所示:

当用户断开连接,然后再次连接时,旧消息的显示方式应与发送时相同。 在图像中,您可以看到收到的消息是灰色的,而其他消息是蓝色的:

当用户连接时,我正在使用以下代码检索旧消息:

// Retrieve conversation
	client.on("retrieveConversation", function(data){
		var peopleName = data.result.conversation_receiver;
		var retrievedMessages = [];
		connection.query("SELECT * FROM `messages` WHERE `message_key` = '" + data.result.conversation_key + "'", function(error, results, fields){
			if (error) {
            console.log(error);
            return;
        	} 
        	else if (results) {
          		console.log("Messages: ", results);
        	} 
		});
		console.log("Retrieving conversation", peopleName);
		client.emit("addConversationForSelf", peopleName);
	});

结果在控制台中如下所示:

我如何遍历结果并控制哪些消息(来自正文)应该发送到:1.client.emit("newMessageToOthers", message); 或 2.client.emit("ownMessage", message); - 请注意,这两个选项控制消息是灰色还是蓝色。

【问题讨论】:

  • 循环时你知道userfrom_id来区分'ownMessage'和'newMessageToOthers'吗?
  • 抱歉@vabii,我不明白你的问题?
  • userfrom_id 与消息一起存储。我已经用我的消息表外观的图像更新了我的问题。
  • 要知道 RowDataPacket 是属于您还是其他任何用户,您需要知道您的 userFrom_id,对吗?我在问您是否有该信息,以便在循环期间,您可以调用上述两个“client.emit”调用之一。如果我的问题还不清楚,请告诉我?
  • 是的。当用户发送消息时,他们的 id 会添加到每条单独的消息中。

标签: javascript mysql node.js socket.io


【解决方案1】:

类似的东西

var results = [{body: 'Hi', userfrom_id: 'abc'}, {body: 'Hi', userfrom_id: 'xyz'}, {body: 'Hi', userfrom_id: 'abc'}]; //this is your result from database
var currUser_id = 'abc'; //this is current user

//loop
results.forEach(function(packet){if(packet.userfrom_id == currUser_id){console.log('my packet');}else{console.log('other user packet')}});

【讨论】:

    猜你喜欢
    • 2018-12-03
    • 2021-11-06
    • 2020-05-13
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    相关资源
    最近更新 更多