javascript - 验证数据并将其保存到数据库以供实时应用程序的正确方法

标签 javascript php node.js laravel socket.io

例如,我基于 Laravel + Node.js 服务器构建聊天应用程序。
创建新消息的最佳想法是什么:

  1. 向服务器发送消息 -> 验证它并通过 Node.js 将其添加到数据库 -> 将消息返回给所有用户
  2. 在 Laravel 中制作 api 进行验证和数据库 -> 使用 ajax (我认为这不是最好的主意)
  3. 在 Laravel 中制作 api 进行验证和数据库 -> 向服务器发出消息 -> 在 Node.js 中向 Laravel 中的 api 发出请求 -> 将消息返回给所有用户
  4. 其他?

最佳答案

我会这样做:

1 - 使用 Node.js 验证消息并在有效时立即广播。

您可以利用 Node.js 事件和 EventsEmitter 并对每个新消息使用react。此外,通过这种方法,您将在消息有效后立即向所有用户广播该消息。

2 - 通过 Node.js 调用 Laravel API 将验证的消息保存到数据库

一旦您的消息被广播,您就可以通过在 Node.js 应用程序中调用 Laravel API 将其保存到数据库。

var events = require('events');
var eventEmitter = new events.EventEmitter();

function saveToDb() {
  // call to api here
}

function validate(msg) {
  //validate msg
  return valid;
}


eventEmitter.on('msgBroadcasted', saveToDb);
eventEmitter.on('msgBroadcasted', anotherFunction);


socket.on('new message', function (data) {
  if (!validate(data)) { return false }

  socket.broadcast.emit('new message', {
    username: socket.username,
    message: data
  });
  return eventEmitter.emit('msgBroadcasted');
});

关于javascript - 验证数据并将其保存到数据库以供实时应用程序的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36878334/

相关文章:

javascript - 在 google api 中设置用于绘制多边形的缩放选项

javascript - 让 Chrome 不要求输入 'http://'

php - 如何检测 icecast/shoutcast 流是否存在?

node.js - 如何在nodejs命令行应用程序中存储有关分 ionic 进程的信息

javascript - typescript :按接口(interface)或类过滤对象

JavaScript 调用对象语法

javascript - JSON 到 Tree JS

php - PHP 中高效的字符串替换

php - 选择部分但不是全部子节点

node.js - 发送 ERC-20 代币失败。交易成功,但没有发送 token