Почему мой успешный потоковый ответ в Webmachine имеет код состояния 500?

Следующий код является полным источником ресурса веб-машины. Ожидаемое поведение заключается в том, что ответ потоковой передачи должен быть 200, и должен быть строкой заданной длины, полностью состоящей из буквы "а".

Эта строка действительно возвращается как тело ответа, но код состояния - 500. Как это может быть?

-module(dummy_binary_resource).
-export([init/1, to_html/2]).

-include_lib("webmachine/include/webmachine.hrl").

init(Config)->
    {ok, Config}.

send_streamed_body(Remaining) ->
    PacketSize=1024,
    case Remaining of
        Partial when Partial =< PacketSize ->
            {string:chars($a,Partial),done};
        Full ->
            {string:chars($a,Full), fun() -> send_streamed_body(Remaining - PacketSize) end}
    end.

to_html(ReqData,State)->
    PathInfo = wrq:path_info(ReqData),
    {ok,SizeString} = dict:find(size,PathInfo),
    {Size,[]} = string:to_integer(SizeString),
    {true,wrq:set_resp_body({stream,send_streamed_body(Size)},ReqData),State}.

1 ответ

Возвращаемое значение было неверным.

Соответствующее возвращаемое значение {{halt, 200}, wrq:set_resp_body({stream, send_streamed_body(Size)}, ReqData), State}. потому что запись данных запроса была инициализирована с кодом по умолчанию 500. Кажется немного нелогичным возвращать значение "остановки", которое ничего не остановит, но на самом деле будет означать успех.

Другие вопросы по тегам