는 POST 요청을 받아 ETS 테이블 여기카우보이 POST 핸들러
로를 저장하려고하면 내가 말릴 때 코드
init(Req0, Opts) ->
Method = cowboy_req:method(Req0),
HasBody = cowboy_req:has_body(Req0),
Req = maybe_echo(Method, HasBody, Req0),
{ok, Req, Opts}.
maybe_echo(<<"POST">>, true, Req0) ->
{ok, PostVals, Req} = cowboy_req:read_urlencoded_body(Req0),
Echo = proplists:get_value(<<"echo">>, PostVals),
echo(Echo, Req);
maybe_echo(<<"POST">>, false, Req) ->
cowboy_req:reply(400, [], <<"Missing body.">>, Req);
maybe_echo(_, _, Req) ->
%% Method not allowed.
cowboy_req:reply(405, Req).
echo(undefined, Req) ->
cowboy_req:reply(400, [], <<"Missing echo parameter.">>, Req);
echo(Echo, Req) ->
Inf = #news{id=25, created=today, article=Echo},
case ets:insert(news, {Inf#news.id, Inf#news.created, Inf#news.article}) of
true -> cowboy_req:reply(200, #{<<"content-type">> => <<"text/plain; charset=utf-8">>}, Echo, Req);
_ ->
Error = <<"{\"error\": \"error\"}">>,
cowboy_req:reply(200, #{<<"content-type">> => <<"text/plain; charset=utf-8">>}, Error, Req)
end.
입니다 :
$ 컬 -i -H "콘텐츠 - 유형 : application/json "-X POST -d echo = '{"action ":"insert ","key ":"some_key ","value ": [1,2,3]}'http://localhost:8080/
I 오류가 발생했습니다 :
= ERROR REPORT ==== 29-Jan-2017 :: 18 : 57 : 21 === 목장 청취자 http, 연결 프로세스 < 0.240.0>, 스트림 1의 요청 프로세스가 < 0.241.0> 종료되었습니다. 이유가있는 badarg 및 stacktrace [{ets, insert, [뉴스, {25, 오늘, < < "액션 \": \ "삽입 \", \ "키 \": \ "some_key \", \ "값 \ {dev/news/_build/default/lib/news/src /} ","[1,2,3]} ","/dev/news/_build/default/lib/news/src/post_handler.erl "}, {post_handler.erl"}, {line, 25}}}, {post_handler, init, 2, }}, {cowboy_handler, execute, 2, {{파일, "/ dev/news/_build/default/lib/cowboy/src/cowboy_handler.erl"}, {line, {cowboy_stream_h, proc_lib_hack, 3,} {cowboy_stream_h, execute, 3, {{파일, "/ dev/news/_build/default/lib/cowboy/src/cowboy_stream_h.erl"}, {line, 173}}} [{file, "e :/_ dev/news/_build/default/lib/cowboy/src/cowboy_stream_
하지만 에코처럼 사용할 때 (예 : h.erl "}, {line, 158}]}, {proc_lib, init_p_do_apply, 3, {proc_lib.erl"}}
그래서 - : 이것은 ({ "삽입", "키": "some_key", "값"[1,2,3] '액션'})
echo(Echo, Req) ->
cowboy_req:reply(200, #{<<"content-type">> => <<"text/plain; charset=utf-8">>}, Echo, Req)
end.
I 요청을받을 ETS에 뭔가있는 것처럼 보입니까? 새로운 (뉴스, [오더, 보호, named_table, {keypos, 1}, {read_concurrency 사실}, {write_concurrency :하지만 난 다른 모듈
ETS에서 ETS 만들기
을 엉망으로 아무 생각이 없다 사실은}])이 문제
ETS 테이블을 만드는 방법과 장소는 어디입니까? 당신은 그것이'named_table'이고 그 이름은'news'입니까? – Dogbert
@Dogbert 나는이 모듈을 -record (news, {id, created, article})와 같이 시작 모듈에서 만들었습니다. {ok, Tab} : Tab = ets : new (뉴스, [ordered_set, protected, named_table, {keypos, 1}, {read_concurrency, true}, {write_concurrency, true}]) – Qbeck
@Qbeck, 질문에 해당 내용을 편집해야합니다. –