0

私は小さなyaws appmodテストを持っています:

-module(webservice).
-include("../include/yaws_api.hrl").
-compile(export_all).

http(parse_query,Arg) ->
    yaws_api:parse_query(Arg);

out(Arg) -> 
    {html, [http(parse_query,Arg)]}.

yaws_api:parse_query 関数を実行すると、yaws インタラクティブ モードから次のエラー レポートが表示されます。

Yaws process died: {function_clause,
                   [{yaws_server,binary_size,
                        [0,{"i",undefined}],
                        [{file,"yaws_server.erl"},{line,3015}]},
                    {yaws_server,binary_size,2,
                        [{file,"yaws_server.erl"},{line,3018}]},
                    {yaws_server,binary_size,2,
                        [{file,"yaws_server.erl"},{line,3018}]},
                    {yaws_server,deflate_accumulated,4,
                        [{file,"yaws_server.erl"},{line,3712}]},
                    {yaws_server,deliver_accumulated,4,
                        [{file,"yaws_server.erl"},{line,3666}]},
                    {yaws_server,finish_up_dyn_file,2,
                        [{file,"yaws_server.erl"},{line,2745}]},
                    {yaws_server,aloop,4,
                        [{file,"yaws_server.erl"},{line,1175}]},
                    {yaws_server,acceptor0,2,
                        [{file,"yaws_server.erl"},{line,1016}]}]}

appmod は config で次のようにセットアップされます。

<server localhost>
    port = 8080
    listen = 127.0.0.1
    #docroot = /usr/share/yaws
    docroot = /usr/lib/yaws/www
    appmods = </,webservice>
    # dir_listings = true
</server>
4

1 に答える 1

8

表示されていませんが、アクセスしようとしている URL には、次のような少なくとも 1 つの変数を含むクエリ文字列が含まれてiいるようです。

http://example.com/foo?i=10

その URL に対して、yaws_api:parse_query/1は を返します。これは、構文[{"i","10"}]を使用して HTML として Yaws に返そうとしています。{html, iolist()}残念ながら、[{"i","10"}]は iolist、string、または binary ではないため、Yaws は失敗します。

次のように、呼び出し[{"i","10"}]を使用して文字列に変換することで、これを修正できます。yaws_api:f/2

out(Arg) ->
    {html, yaws_api:f("~p", [http(parse_query,Arg)])}.

または標準io_lib:format/2呼び出しを使用します。

out(Arg) ->
    {html, io_lib:format("~p", [http(parse_query,Arg)])}.

yaws_api:f/2関数は単なるラッパーio_lib:format/2です。

于 2012-10-28T19:38:08.220 に答える