我有一个小的雅斯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>发布于 2012-10-29 03:38:08
尽管您没有显示它,但是看起来您试图访问的URL有一个查询字符串,该字符串至少有一个名为i的变量,如下所示:
http://example.com/foo?i=10对于该URL,yaws_api:parse_query/1将返回[{"i","10"}],然后尝试使用{html, iolist()}结构将其作为HTML返回给Yaws。不幸的是,[{"i","10"}]不是iolist、字符串或二进制文件,所以Yaws失败了。
您可以通过使用yaws_api:f/2调用将[{"i","10"}]转换为字符串来解决此问题,如下所示:
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的包装器。
https://stackoverflow.com/questions/13109062
复制相似问题