首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Yaws + Erlang输出数据

Yaws + Erlang输出数据
EN

Stack Overflow用户
提问于 2014-02-19 07:06:03
回答 1查看 341关注 0票数 0

Iam是erlang的新版本,它试图从mysql服务器获取数据:

代码语言:javascript
复制
   <erl>
        out(A) ->
    application:start(odbc), 
    ConnString = 
    "Driver={MySQL ODBC 5.2 ANSI Driver};" ++
    "Server=127.0.0.1;Database=teamsDatabase;" ++ 
        "User=root;Password=1q2w3e;" ++ 
        "Option=3;", 
        {ok, Conn} = odbc:connect(ConnString, []), 
        Results = odbc:sql_query(Conn, "select team_name from teams limit 2"), 
        {ehtml,
            [{h4,[], "The database result:"},
        {hr},
        {html, lists:map(fun(X) -> {Tname} = X, io_lib:format("ID: ~p ", [Tname]) end, Results)}]}.

当然,我得到了一个错误:

代码语言:javascript
复制
ERROR erlang code threw an uncaught exception:
 File: c:/yaws/zero.yaws:39
Class: error
Exception: function_clause
Req: {http_request,'GET',{abs_path,"/zero.yaws"},{1,1}}
Stack: [{lists,map,
               [#Fun,
                {selected,["team_name"],[{"Team 1"},{"Team 2"}]}],
               [{file,"lists.erl"},{line,1223}]},

我如何输出我的数据?看起来是这样的:

代码语言:javascript
复制
{selected,["team_name"],[{"Team 1"},{"Team 2"}]}

这是名单?还是..?我发现了这个:在Yaws中将Erlang列表输出为HTML数据,但是它对我没有用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-20 14:04:16

您所得到的错误是由于向lists:map/2传递一个元组而不是作为第二个参数的列表。

如果使用ehtml返回结果,则可以这样做,只需将整个结果打印为字符串:

代码语言:javascript
复制
{ehtml,
 [{h4, [], "The database result:"},
  {hr},
  {p, [], io_lib:format("~p", [Results])}]}

当然,这并不理想,因为它在您的网页中公开了Erlang格式的术语。更好的办法可能是:

代码语言:javascript
复制
{selected, [Selector], Results} = odbc:sql_query(Conn, "select team_name from teams limit 2"),
{ehtml,
 [{h4, [], "The database result:"},
  {hr},
  [{p, [], [Selector, ": ", Val]} || Val <- Results]]}

这将导致以下HTML:

代码语言:javascript
复制
<h4>The database result:</h4><hr />
<p>team_name: Team 1</p>
<p>team_name: Team 2</p>

请注意,第二种方法模式-匹配从数据库查询返回的结果,以帮助准备用于形成ehtml的结果。您可以更改此方法的详细信息,以按您的意愿格式化结果。

顺便说一句,您应该使用另一种方法来建立数据库连接,因为将其放入.yaws页面的.yaws函数中意味着每次客户端请求该页面时都会运行该连接。对于一些简单的东西,您可以创建一个小的Erlang应用程序,其中一个监控器监视连接到数据库的gen_server,其中gen_server回调模块有一个API函数来返回连接,以便在out/1函数中使用。当Yaws通过runmod特性在Yaws文档中描述启动时,可以启动此应用程序。这方面的好处是,在应用程序启动和停止期间,它可以干净地连接和断开数据库,但请注意,它只提供一个连接。对于更可伸缩的方法,您可能会在github或其他可以使用的站点上找到数据库连接池模块。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21873418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档