【问题标题】:Cannot find function `jsx:is_json/1` although jsx is included and compiled尽管包含并编译了 jsx,但找不到函数 `jsx:is_json/1`
【发布时间】:2017-05-16 14:00:40
【问题描述】:

我正在使用 Erlang 工具链(OTP、rebar3、cowboy、jsx...)编写一个 web 应用程序。以下代码不起作用,因为在运行时找不到jsx:is_json/1

handle_login(Req, State) ->
  {ok, Data, _} = cowboy_req:body(Req),

  case jsx:is_json(Data) of
    false -> cowboy_req:reply(400,
      [
        {<<"content-type">>, <<"application/json">>}
      ],
      <<"Invalid JSON">>,
      Req);

堆栈跟踪:

{[{reason,undef},
   {mfa,{erbid_api_handler,handle,2}},
   {stacktrace,
      [{jsx,is_json,[<<"{\"username\":\"tom\"}">>],[]},
       {erbid_api_handler,handle_login,2,
           [{file,
                "/Users/khanhhua/dev/project-erbid/_build/default/lib/erbid/src/erbid_api_handler.erl"},
            {line,45}]},
       {erbid_api_handler,handle,2,
... truncated for brevity

文件夹结构:

我需要知道如何解决这个问题。谢谢。

【问题讨论】:

  • 您正在运行什么 rebar3 命令来启动您的应用程序?
  • @Stratus3D 感谢您的评论。这是_build/default/rel/erbid_alpha/bin/erbid_alpha foreground。无论如何,我已经解决了这个愚蠢的问题。

标签: functional-programming erlang rebar3


【解决方案1】:

我已经找到了这个问题的原因。我没有在 erbid.app.src 的应用程序部分中包含模块 jsx

{application, erbid, [
    {description, "Realtime system"},
    {vsn, "0.1.0"},
    {registered, []},
    {applications, [
        kernel,
        stdlib,
        cowboy,
        jsx
    ]},
    {mod, {erbid, []}},
    {env, []}
]}.

完全是因为我缺乏 Erlang 经验。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-14
    • 2019-01-03
    • 2015-01-02
    • 1970-01-01
    • 2012-03-15
    • 2017-03-21
    • 2020-07-07
    • 2019-07-30
    相关资源
    最近更新 更多