Rest 牛仔中的多个休息处理程序

Rest 牛仔中的多个休息处理程序,rest,erlang,cowboy,Rest,Erlang,Cowboy,是否有一种简单的方法可以在Cowboy中设置一条调度路线,允许多个处理程序,例如: /基础/添加内容 /把某物放下来 让每个动作都由一个可以区分它们的处理程序提供服务?所有示例似乎都将1个处理程序映射到1个分派,如果可能,我希望整合功能。您可以这样做: 派遣: ... Dispatch = cowboy_router:compile( [{'_', [{"/base/:action", [{type,

是否有一种简单的方法可以在Cowboy中设置一条调度路线,允许多个处理程序,例如: /基础/添加内容 /把某物放下来

让每个动作都由一个可以区分它们的处理程序提供服务?所有示例似乎都将1个处理程序映射到1个分派,如果可能,我希望整合功能。

您可以这样做:

派遣:

...
Dispatch = cowboy_router:compile(
             [{'_', [{"/base/:action", 
                      [{type,
                        function,
                        is_in_list([<<"add_something">>,
                                    <<"remove_something">>])}], 
                      app_handler, []}]}]),
...
is_in_list(L) ->
    fun(Value) -> lists:member(Value, L) end.
...
。。。
Dispatch=cowboy\u路由器:编译(
[{'.',[{/base/:action”,
[{类型,
功能,
是_在_列表中([,,
])}], 
app_handler,[]}]}],
...
是否在列表中(L)->
乐趣(价值)->列表:成员(价值,L)结束。
...
在app_handler.erl中:

...
-record(state, {action :: binary()}).
...
rest_init(Req, Opts) ->
    {Action, Req2} = cowboy_req:binding(action, Req),
    {ok, Req2, #state{action=Action}}.
...
allowed_methods(Req, #state{action=<<"add_something">>}=State) ->
    {[<<"POST">>], Req, State};
allowed_methods(Req, #state{action=<<"remove_something">>}=State) ->
    {[<<"DELETE">>], Req, State}.
...
。。。
-记录(状态,{action::binary()})。
...
rest_init(请求、选项)->
{Action,Req2}=cowboy_req:binding(Action,req),
{ok,Req2,#state{action=action}。
...
允许的_方法(Req,#state{action=}=state)->
{[],请求,状态};
允许的_方法(Req,#state{action=}=state)->
{[],请求,状态}。
...

等等。

您也可以尝试使用牛仔休息,如下所示:

content_types_accepted(Req, State) ->
   case cowboy_req:method(Req) of
     {<<"POST">>, _ } ->
       Accepted = {[{<<"application/json">>, post_json}], Req, State};
     {<<"PUT">>, _ } ->
       Accepted = {[{<<"application/json">>, put_json}], Req, State}
   end,
Accepted.
content\u types\u accepted(请求、状态)->
案例牛仔需求:方法(需求)
{, _ } ->
已接受={[{,post_json}],请求,状态};
{, _ } ->
已接受={[{,put_json}],请求,状态}
完,,
认可的。

非常感谢,这样就可以了。似乎首选的方法是单独的处理程序模块,但现在我有了这个选项。谢谢。