Я пытаюсь поймать недействительный json при его анализе с помощью jiffy в обработчике ковбойских веб-сокетов. Если json действителен / недействителен, я хочу переслать соответствующее сообщение websocket_info
, которое ответит клиенту. Вот мой код.
websocket_handle({text, Msg}, Req, State) ->
lager:info("Got message ~p",[Msg]),
try jiffy:decode(Msg) of
{[{A,B}]}->{{[{A,B}]},Req,State};
_->{{invalid,Msg},Req,State}
catch
_:_->
{{invalid,Msg},Req,State}
end;
websocket_handle(_Data, Req, State) ->
{ok, Req, State}.
websocket_info({[{A,B}]},Req,State) ->
{reply,{text,jiffy:encode({registered,B})},Req,State};
websocket_info({invalid,Msg},Req,State)->
{reply,{text,jiffy:encode({error,<<"invalid json">>})},Req,State};
Это вызывает исключение во время выполнения.
12: 07: 48.406 [ошибка] У прослушивателя ранчо http был процесс подключения ‹0.523.0> выход по причине: {{try_clause, {{[{‹<" register ">>, ‹<" my-channel ">>}] }, {http_req, # Port ‹0.1337>, ranch_tcp, keepalive,‹ 0.523.0>, ‹( "GET" >>, 'HTTP / 1.1', {{127,0,0,1}, 34869}, ‹ ‹" 127.0.0.1 ">>, undefined, 3000, ‹<" / websocket / ">>, undefined, ‹< >>, undefined, [], [{‹*" upgrade ">>, ‹<" websocket " >>}, {‹< "соединение" >>, ‹< "Обновить" >>}, {‹*********************************************************************************************************************************************************************************************************************************************************************************** >>, ‹< "_ 3 _" >>}, {‹< "pragma" >>, ‹* "no-cache" >>}, {‹< "cache-control" >>, ‹< "no-cache" >>}, {‹< "sec-websocket-key" >>, ‹< "ueSRxsIc4wM7KdGnyhJOhw ==" >>}, {‹< "sec-websocket-version" >>, ‹< "13" >>}, {‹* "sec-websocket-extensions" >>, ‹< "x-webkit-deflate-frame" >>}, {‹< "user-agent" >>, ‹* "Mozilla / 5.0 (X11; Linux i686 (x86_64)) AppleWebKit / 537.36 (KHTML, например Gecko) Chrome / 30.0.1599.114 Safari / 537.36 ">>}], [{‹*" sec-websocket-extensions ">>, [{‹*" x-webkit- deflate-frame ">>, []}]}, {‹<" upgrade ">>, [‹----------------" websocket ">>]}, {‹<" connection ">>, [‹<" upgrade ">> >> ]}], undefined, [{websocket_compress, false}, {websocket_versio n, 13}], ожидание, undefined, ‹< >>, false, done, [], ‹< >>, undefined}, undefined_state}}, [{cowboy_websocket, handler_call, 7, [{file, "src / cowboy_websocket .erl "}, {line, 598}]}, {cowboy_protocol, execute, 4, [{file," src / cowboy_protocol.erl "}, {line, 529}]}]}
Так как я могу это сделать?