Попытка получить запрос POST и сохранить его в таблицуCowboy POST обработчика
здесь ETS является кодом
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 'm получение ошибки:
= СООБЩЕНИЕ ОШИБКИ ==== 29-янв-2017 :: 18: 57: 21 === Ранчо слушателя http, процесс подключения < 0.240.0>, поток 1 имел свой запрос процесса < 0.241.0> exit с аргументом badarg и stacktrace [{ets, insert, [news, {25, today, < < "{\" действие \ ": \" insert \ ", \" key \ ": \" some_key \ ", \" значение \ ": [1,2,3]}" >>}], []}, {post_handler, эхо, 2, [{файл, "е:/_ DEV/новости/_build/по умолчанию/Библиотека/новости/SRC/post_handler.erl "}, {линия, 25}]}, {post_handler, первонач, 2, [{файл," е:/_ DEV/новости/_build/по умолчанию/Библиотека/новости/SRC/post_handler.erl "}, { линия, 8}]}, {cowboy_handler, выполнение, 2, [{файл, "е:/_ DEV/новости/_build/по умолчанию/Библиотека/ковбой/SRC/cowboy_handler.erl"}, {линия, 39}]}, {cowboy_stream_h, выполнение, 3, [{файл, "е:/_ DEV/новости/_build/по умолчанию/Библиотека/ковбой/SRC/cowboy_stream_h.erl"}, {линия, 173}]}, {cowboy_stream_h, proc_lib_hack, 3, [{файл, "е:/_ DEV/новости/_build/по умолчанию/Библиотека/ковбой/SRC/cowboy_stream_ h.erl "}, {line, 158}]}, {proc_lib, init_p_do_apply, 3, [{file," proc_lib.erl "}, {line, 247}]}]
, но когда я использую эхо как это:
echo(Echo, Req) ->
cowboy_req:reply(200, #{<<"content-type">> => <<"text/plain; charset=utf-8">>}, Echo, Req)
end.
я получаю запрос - ({ "действие": "вставить", "ключ": "some_key", "значение": [1,2,3]})
так похоже, что есть что-то с ETS? но я понятия не имею, где я перепутались
Создание ETS в другом модуле
етсь: новый (новости, [ordered_set, защищенные, named_table, {keypos, 1}, {read_concurrency, верно}, {write_concurrency, правда}])
могли бы вы показать мне правильный dirrection, чтобы решить эту проблему
Как и где вы создаете таблицу ETS? Вы уверены, что это 'named_table', а имя -' news'? – Dogbert
@Dogbert Я создал его в стартовом модуле -record (news, {id, created, article}). Tab = ets: new (news, [ordered_set, protected, named_table, {keypos, 1}, {read_concurrency, true}, {write_concurrency, true}]), {ok, Tab}. – Qbeck
@Qbeck, вы должны отредактировать это в вопросе. –