使用socket.io进行服务器端验证

时间:2012-03-20 19:07:00

标签: javascript node.js websocket socket.io server-side

我只是想用nodejs和amp;来验证一些数据。 socket.io服务器端。

所以我用socket.emit('validate data', data)

发送数据

我的方法是通过像这样发送响应服务器端来做到这一点......

socket.emit('validated data', boolean })

..并在客户端获得此响应,就像这样......

socket.on('validated data', function (boolean) {
    validationResponse = boolean;
});

对于只是一个布尔来说,这似乎非常尴尬和无效。 我认为这是一个关于服务器 - 客户端与套接字通信的非常普遍的问题,因此解释将非常有用。

有没有更好的解决方案来获得布尔值或微小信息的直接反应?

3 个答案:

答案 0 :(得分:0)

使用正则表达式来验证字段输入怎么样?您可以将这些正则表达式存储在每个元素的属性中,并通过输入类来应用它们。触发对changeblur等事件的验证检查,您就可以了...

<input type="text" regex="(a|b)" />

<input type="text" class="regex typeA" />

jQuery和其他JavaScript库有很好的表单验证插件,但你也可以自己创建它:

$('.regex').each(function(el) {
  if ($(el).hasClass('typeA')) {
    // doValidation
  }
});

如果必须使用服务器检查用户输入,则无法使用WebSockets或AJAX请求进行验证。 WebSockets当然会产生更少的数据流量......

答案 1 :(得分:0)

我的猜测是否定的,一般来说确实没有更好的(即更多的)解决方案。我个人认为您的代码 很短。如果您想要更短的代码,我唯一的建议是使用更短的标识符名称。

如果您的服务器代码只执行一种操作,则可以删除您的活动,只需将socket.send(data)socket.on("message", fn)一起使用,而不是socket.emit

答案 2 :(得分:0)

我的问题是更短或更安全的代码,但我怀疑的是:

  

我认为这是一个关于服务器 - 客户端的一般性问题   通信

..想到我这边的沟通是错误的。 问题是,如果您尝试使用此类进程保护应用程序,安全性并不是更好,因为您的客户端可能已经伪造了返回的布尔本身客户端。

所以最后我还是更喜欢检查它,但是如果用户发送带有无效/用户名的消息,则该消息将不会发送给其他客户端,并且客户端本身会收到username already taken之类的消息。 / p>

伙计们,对不起&amp;谢谢你的回答。 特别感谢@ThiefMaster