【问题标题】:json encoding in Chicago Boss tutorial doesn't workChicago Boss 教程中的 json 编码不起作用
【发布时间】:2015-02-03 02:24:57
【问题描述】:

芝加哥老板教程

http://www.chicagoboss.org/tutorial.pdf

给出了一个 BossRecord 在控制器响应中自动转换为 JSON 的示例,如下所示:

pull('GET', [LastTimestamp]) ->
    {ok, Timestamp, Greetings} = boss_mq:pull("new-greetings", list_to_integer(LastTimestamp)),
    {json, [{timestamp, Timestamp}, {greetings, Greetings}]}.

但是,此代码不起作用。 boss_json 不会转换从 boss_mq:pull 获得的“问候”记录,并给我一个未处理的错误。我很难弄清楚它想要什么。

16:50:45.634 [error] Unhandled Error: error:function_clause. 
Stacktrace: [{boss_json,json_data1,[[{greeting,"greeting-77","zz"}],[],[]],
[{file,"src/boss/boss_json.erl"},{line,31}]},
{boss_json,json_data1,3,[{file,"src/boss/boss_json.erl"},{line,42}]},
{boss_json,encode,2,[{file,"src/boss/boss_json.erl"},{line,16}]},
{boss_web_controller_render,process_action_result,4,[{file,"src/boss/boss_web_controller_render.erl"},{line,171}]},
{boss_web_controller,execute_action_inner,9,[{file,"src/boss/boss_web_controller.erl"},{line,337}]},
{boss_web_controller_handle_request,process_dynamic_request,4,[{file,"src/boss/boss_web_controller_handle_request.erl"},{line,242}]},
{boss_web_controller_handle_request,process_request,4,[{file,"src/boss/boss_web_controller_handle_request.erl"},{line,228}]},
{boss_web_controller_handle_request,set_timer,7,[{file,"src/boss/boss_web_controller_handle_request.erl"},{line,148}]}]

16:50:45.636 [info] POST /greeting/create [cbmonitor] 302 0ms

知道为什么教程示例(几年前写的)不再适用于当前版本的 Chicago Boss 吗?

【问题讨论】:

    标签: json erlang chicagoboss


    【解决方案1】:

    这实际上不是一个答案,但评论太长了。我从chicagoboss_tutorial 运行示例代码,它对我有用。您可以尝试克隆此存储库并检查一下,有什么不同。

    我也在执行过程中运行dbg

    dbg:tracer().
    dbg:tpl(boss_json, '_', []).
    dbg:p(all, c).
    

    它给了我以下输出:

    (<0.195.0>) call boss_json:encode([{timestamp,1417745752505174},{greetings,
    [{greeting,"greeting-4","asdf"}]}],["greeting"])
    (<0.195.0>) call boss_json:json_data1([{timestamp,1417745752505174},{greetings,[{greeting,"greeting-4","asdf"}]}],["greeting"],[])
    (<0.195.0>) call boss_json:json_data1([{greetings,[{greeting,"greeting-4","asdf"}]}],["greeting"],[{timestamp,1417745752505174}])
    (<0.195.0>) call boss_json:json_data1([],["greeting"],[{greetings,[{struct,[{id,<<"greeting-4">>},{greeting_text,<<"asdf">>}]}]},
    

    boss_json:encode/2boss_json:json_data1 的第二个参数是 ModelList,由于某种原因,您的模型列表为空。正如我之前所说 - 尝试将您的代码与存储库中的代码进行比较。

    【讨论】:

    • 谢谢!我是从 PDF 复制/粘贴的。回购中可能反映了一些变化。一方面,它看起来像是传递了一个额外的参数,其中包含 BossRecord 类型的名称,我在其中传递了一个空列表....
    • 虽然存储库已将“after_create”注释掉,但这不可能工作......
    • 我取消了那部分的注释。我认为这是我做出的唯一改变。
    • 谢谢。我将继续学习本教程,因为这些钩子/触发器无论如何都不是“正确”的方法。 R17 或我构建的其中一个库有一些有趣的地方。
    • 这就是问题所在!我使用的是 R16B02。我现在尝试使用 R17 也出现错误,但与您的不同。还有大量关于在编译期间使用不推荐使用的东西的警告。我认为,在 CB 团队修复这些问题之前,最好坚持使用 R16B02。
    猜你喜欢
    • 2018-07-15
    • 2014-09-30
    • 2013-05-04
    • 2023-03-20
    • 2014-12-16
    • 2017-03-12
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    相关资源
    最近更新 更多