Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Websocket Elixir-检查字符串是否为空_Websocket_Elixir_Phoenix Framework - Fatal编程技术网

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%确保字符串不是空的,您可以使用包装
广播,或仅将其包装为
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