2017-01-02 2 views
0

J'écris une webapp en utilisant la chaîne d'outils Erlang (OTP, rebar3, cowboy, jsx ...). Le code suivant ne fonctionne pas car jsx:is_json/1 est introuvable pendant l'exécution.Impossible de trouver la fonction `jsx: is_json/1` bien que jsx soit inclus et compilé

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 

Structure des dossiers: Project's _build folder structure

je dois savoir comment résoudre le problème. Merci.

+0

Quelle commande rebar3 exécutez-vous pour démarrer votre application? – Stratus3D

+0

@ Stratus3D Merci pour votre commentaire. C'est '_build/default/rel/erbid_alpha/bin/erbid_alpha foreground'. De toute façon, j'ai résolu le problème stupide. –

Répondre

0

J'ai trouvé la cause de ce problème. Je n'ai pas inclus le module jsx dans la section des applications de mon erbid.app.src.

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

Totalement en raison de mon manque d'expérience Erlang.