2017-01-02 2 views
0

Ich schreibe eine Webapp mit Erlang Toolchain (OTP, rebar3, cowboy, jsx ...). Der folgende Code funktioniert nicht, da jsx:is_json/1 zur Laufzeit nicht gefunden werden kann.Kann die Funktion `jsx: is_json/1` nicht finden, obwohl jsx enthalten ist und kompiliert wurde

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); 

Stacktrace:

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

Ordnerstruktur: Project's _build folder structure

Ich muss wissen, wie das Problem zu beheben. Vielen Dank.

+0

Mit welchem ​​Befehl rebar3 starten Sie Ihre Anwendung? – Stratus3D

+0

@ Stratus3D Danke für Ihren Kommentar. Es ist '_build/default/rel/erbid_alpha/bin/erbid_alpha Vordergrund '. Außerdem habe ich das dumme Problem behoben. –

Antwort

0

Ich habe die Ursache für dieses Problem gefunden. Ich habe das Modul jsx nicht in meinen Anwendungsabschnitt erbid.app.src aufgenommen.

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

Total aufgrund meines Mangels an Erlang Erfahrung.