Websocket Elixir-检查字符串是否为空
继此之后,我第一次玩了Websocket Elixir-检查字符串是否为空,websocket,elixir,phoenix-framework,Websocket,Elixir,Phoenix Framework,继此之后,我第一次玩了Elixir和Phoenix Framework 我有一个简单的客户端/服务器应用程序 chat/lib/chat_web/room_channel.ex: defmodule ChatWeb.RoomChannel do use Phoenix.Channel def join("room:lobby", _message, socket) do {:ok, socket} end def join("room:" <> _priva
Elixir
和Phoenix Framework
我有一个简单的客户端/服务器应用程序
chat/lib/chat_web/room_channel.ex:
defmodule ChatWeb.RoomChannel do
use Phoenix.Channel
def join("room:lobby", _message, socket) do
{:ok, socket}
end
def join("room:" <> _private_room_id, _params, _socket) do
{:error, %{reason: "unauthorized"}}
end
def handle_in("new_msg", %{"body" => body}, socket) do
broadcast! socket, "new_msg", %{body: body}
{:noreply, socket}
end
end
我该怎么做
我要阻止空传入消息(正文为空字符串)
您可以为此添加一个保护子句。当正文出现时,“”
或当字节大小(正文)>0时
def handle_in("new_msg", %{"body" => body}, socket) when body != "" do
...
end
现在,只有当主体不是“
时,此函数才会匹配
如果还希望处理空body情况,可以添加两个类似的子句(不再需要guard子句,因为如果body为空,第二个子句将永远不匹配):
您可以使用@Dogbert建议的答案,但为了100%确保字符串不是空的,您可以使用包装广播在helper私有函数中使用code>,或仅将其包装为if
或,除非(负if)表达式
unless String.trim(body) == "" do
broadcast! socket, "new_msg", %{body: body}
end
如果要返回错误消息,请尝试使用更复杂的方法,例如:
if String.trim(body) != "" do
broadcast! socket, "new_msg", %{body: body}
else
broadcast! socket, "error_msg", %{body: "Body is empty"}
end
是否可以返回某种错误,而不是忽略这些消息?是的,您可以为“body”=>“
添加另一个子句。我已经编辑了我的答案,将其包括在内。谢谢@Dogbert解决方案非常简单。。。所以我仍然不确定我是否真的需要返回错误消息或忽略这些消息,但最初我实际上是在寻找类似于您的解决方案。。可惜我不能同时接受两个答案,因为两个答案都很好!
unless String.trim(body) == "" do
broadcast! socket, "new_msg", %{body: body}
end
if String.trim(body) != "" do
broadcast! socket, "new_msg", %{body: body}
else
broadcast! socket, "error_msg", %{body: "Body is empty"}
end