在ChicagoBoss中调用before_之后,不会调用Controller操作

时间:2016-07-30 18:52:52

标签: erlang chicagoboss

我正在尝试学习ChicagoBoss MVC Web框架,本教程似乎是一个好的开始

  

https://github.com/ChicagoBoss/ChicagoBoss/wiki/an-evening-with-chicago-boss

这一切都很棒且令人兴奋,直到作者引入了before_函数来确保调用required_login。我面临的问题是list函数停止被调用,这是我的代码

-module(outings_outgoer_controller, [Req]).
-compile(export_all).
% -export([list/3]).

before_ (Action) ->
    io:fwrite("in before_ Action is: ~s~n", [Action]),
    case Action of
        "login" ->
            ok;
        "register" ->
            ok;
        _ ->
            io:fwrite("  - login is required for this action!~n", []), %gets printed successfully 
            Outgoer = user_lib:require_login(Req),
            io:fwrite("  - ~p is logged in~n", [Outgoer]), %gets printed successfully 
            Outgoer
    end.

list('GET', [], Outgoer) ->
    io:fwrite("An outgoer is requesting his list~n", []), % never gets printed
    {ok, [{outgoer, Outgoer}]}

这是require_login函数

require_login(Req) ->
    case Req:cookie("user_id") of
        undefined -> {redirect, "/outgoer/login"};
        Id ->
            case boss_db:find(Id) of
                undefined -> {redirect, "/outgoer/login"};
                Outgoer ->
                    case Outgoer:session_identifier() =:= Req:cookie("session_id") of
                        false -> {redirect, "/outgoer/login"};
                        true -> {ok, Outgoer}
                    end
            end
     end.

这是我在访问outgoer/list

时在我的控制台中获得的打印件
in before_ Action is: list
  - login is required for this action!
  - {ok,{outgoer,"outgoer-1","mohamed","1@3.com",
             "a982ff46c5664edc593329ab558445fc"}} is logged in
20:29:31.439 [notice] [ChicagoBoss] The function outings_outgoer_controller:list/2 is not exported, if in doubt add -export([list/2])) to the module
20:29:31.440 [info] GET /outgoer/list [outings] 200 18ms
Reloading outings_outgoer_controller ... fail: nofile.

我从https://github.com/ChicagoBoss/ChicagoBoss下载了ChicagoBoss,我正在使用Erlang 18

1 个答案:

答案 0 :(得分:0)

事实证明我得到了通知outings_outgoer_controller:list/2 is not exported,因为`list'函数无法编译,因为我忘了用点结束函数。无论如何,我从http://learnyousomeerlang.com/errors-and-exceptions得到了提示

  

./ module.erl:2:function some_function / 1 undefined   该函数不存在。
您在-export属性中或在声明函数时写了错误的名称或arity。当无法编译给定函数时,也会输出此错误,通常是因为忘记结束具有句点的函数等语法错误。