2017-01-02 32 views
0

我正在使用Erlang工具鏈(OTP,rebar3,cowboy,jsx ...)編寫webapp。以下代碼不起作用,因爲在運行時無法找到jsx:is_json/1雖然包含並編譯了jsx,但找不到函數`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 

文件夾結構: Project's _build folder structure

我需要知道如何解決這個問題。謝謝。

+0

你運行什麼樣的rebar3命令來啓動你的應用程序? – Stratus3D

+0

@ Stratus3D感謝您的評論。它是'_build/default/rel/erbid_alpha/bin/erbid_alpha前景'。反正,我已經解決了這個愚蠢的問題。 –

回答

0

我發現了這個問題的原因。我沒有在我的erbid.app.src的應用部分中包含模塊jsx

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

完全由於我缺乏Erlang的經驗。

相關問題