【发布时间】:2014-03-01 18:38:16
【问题描述】:
由于某种原因,我的 erlang 服务器在每次请求后都会生成一个 case_clause 错误。这是我的代码:
keychain_no_auth_handler.erl
-module(keychain_no_auth_handler).
-export(
[ init/3,
content_types_accepted/2,
terminate/3,
allowed_methods/2,
handle_request/2
]).
-export([is_registered/1]).
init(_Transport, _Req, []) -> {upgrade, protocol, cowboy_rest}.
terminate(_Reason, _Req, _State) -> ok.
allowed_methods(Req, State) -> {[<<"POST">>], Req, State}.
content_types_accepted(Req, State) -> {[{<<"application/json">>, handle_request}], Req, State}.
handle_request(Req, State) ->
{Action, Req2} = cowboy_req:binding(action, Req),
{Reply, Req3} = case Action of
<<"registered">> -> is_registered(Req2)
end,
{ok, Req4} = cowboy_req:reply(200, [{<<"content-type">>, <<"application/json">>}], Reply, Req3),
{ok, Req4, State}
.
is_registered(Req) ->
{Number, Req2} = cowboy_req:qs_val(<<"number">>, Req),
Reply = backend:is_registered(Number),
{Reply, Req2}
.
is_registered [函数]
is_registered(Number) ->
emysql:prepare(is_registered, <<"SELECT `device`.`id` FROM `device` WHERE `device`.`number`= ?">>),
ResultPacket = emysql:execute(auth_pool, is_registered, [Number]),
ResultType = is_record(ResultPacket, result_packet),
case ResultType of
true ->
Field = emysql_util:as_proplist(ResultPacket),
Id = proplists:get_value(<<"device.id">>, Field),
Registered = Id >= 0,
case Registered of
true ->
Reply = {[{response, registered}]},
jiffy:encode(Reply)
;
false ->
Reply = {[{response, available}]},
jiffy:encode(Reply)
end;
false ->
Reply = {[{response, error}]},
jiffy:encode(Reply)
end
.
服务器以适当的响应进行回复,然后在每次请求后生成 case_clause 错误:
=错误报告==== 2014 年 2 月 5 日::10:32:39 === 节点“keychain@dnldd”上的进程 出错,退出值: {{case_clause,{ok,{http_req,#Port,ranch_tcp,keepalive,,>,'HTTP/1.1',{{127,0,0,1},49720},>,未定义,4004,>,未定义,>,[],[{action,>}],[{>,>},{>,>},{>,>},{>,>},{>,>},{>,>},{>,>},{>,>},{>,>},{>,>},{>,>},{>,>},{>,>}],[{>,{>,>,[]}},{>,未定义},{>,未定义},{>,未定义},{>,未定义},{>,[...
=错误报告==== 2014 年 2 月 5 日::10:32:39 === 牧场侦听器 keychain_http 的连接过程开始于 cowboy_protocol:start_link/4 at 退出原因: {{case_clause,{ok,{http_req,#Port,ranch_tcp,keepalive,,>,'HTTP/1.1',{{127,0,0,1} ,49720},>,undefined,4004,>,undefined,>,[],[{action,>}] ,[{>,>},{>,>},{>,>},{>,>},{>,>},{>,>},{>,>}, {>,>},{>,>},{>,/">>},{>,>},{>, >},{>,>}],[{>,{>,>,[]}},{>,undefined},{>,undefined},{>,undefined},{>,undefined},{>,[{{">>, ">>,[]},1000,[]}]},{>,[>]}],undefined,[{字符集,未定义},{media_type,{>,>,[]}}],等待,未定义,>,true,done,[], >,undefined},undefined}},[{cowboy_rest,process_content_type,3,[{file,"src/cowboy_rest.erl"},{line,780}]},{cowboy_protocol,execute,4,[{file," src/cowboy_protocol.erl"},{line,529}]}]}
我在这里做错了什么?谢谢。
【问题讨论】: