ET-*_*-CS 2 elixir websocket 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:" <> _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
Run Code Online (Sandbox Code Playgroud)
我想阻止空的传入消息(body为空字符串)
def handle_in("new_msg", %{"body" => body}, socket) do
# I guess the code should be here..
broadcast! socket, "new_msg", %{body: body}
{:noreply, socket}
end
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我想阻止空的传入消息(正文为空字符串)
您可以为此添加保护子句。无论是when body != ""或when byte_size(body) > 0
def handle_in("new_msg", %{"body" => body}, socket) when body != "" do
...
end
Run Code Online (Sandbox Code Playgroud)
现在,此函数仅在body不匹配时匹配""。
如果您还想处理空的主体大小写,则可以添加两个这样的子句(不再需要guard子句,因为如果body为空,则第二个子句将不再匹配):
def handle_in("new_msg", %{"body" => ""}, socket) do
# broadcast error here
end
def handle_in("new_msg", %{"body" => body}, socket) do
# broadcast normal here
end
Run Code Online (Sandbox Code Playgroud)