【问题标题】:Yaws + Erlang. Output data雅司+二郎。输出数据
【发布时间】:2014-03-19 08:47:20
【问题描述】:

我是 erlang 新手,正在尝试从 mysql 服务器获取数据:

   <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)}]}.

当然,我得到了错误:

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}]},

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

{selected,["team_name"],[{"Team 1"},{"Team 2"}]}

这是列表?要么..? 我找到了这个: Output data of Erlang List as a HTML in Yaws 但这对我不起作用。

【问题讨论】:

    标签: erlang yaws erlangweb


    【解决方案1】:

    您遇到的错误是由于将元组而不是列表作为第二个参数传递给 lists:map/2

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

    {ehtml,
     [{h4, [], "The database result:"},
      {hr},
      {p, [], io_lib:format("~p", [Results])}]}
    

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

    {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:

    <h4>The database result:</h4><hr />
    <p>team_name: Team 1</p>
    <p>team_name: Team 2</p>
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-13
      • 2010-11-02
      • 2010-10-02
      • 2011-03-06
      • 1970-01-01
      • 2019-04-15
      相关资源
      最近更新 更多