init/2 在牛仔中未定义 hello_handler

init/2 undefined in cowboy hello_handler

我关注https://ninenines.eu/docs/en/cowboy/2.0/guide/getting_started/

当我运行

gmake new t=cowboy_http n=hello_handler

这会创建 src/hello_handler

-module(hello_handler).
-behaviour(cowboy_http_handler).

-export([init/3]).
-export([handle/2]).
-export([terminate/3]).

-record(state, {
}).

init(_, Req, _Opts) ->
    {ok, Req, #state{}}.

handle(Req, State=#state{}) ->
    {ok, Req2} = cowboy_req:reply(200, Req),
    {ok, Req2, State}.

terminate(_Reason, _Req, _State) ->
    ok.

说明说要修改 init/2,但只有 init/3。该文档是否已过时..?

您正在查看的文档与您正在查看的 cowboy 版本不匹配。文档适用于版本 2.x,处理程序适用于版本 1.x.

Cowboy 1.x 系列实现了具有行为的 http 处理程序。当您从模板生成处理程序时,该处理程序会实现该行为。

然而,在 Cowboy 2.x 中,处理程序只需要实现 init/2,而不再需要实现行为。

当你查看 Cowboy 时,你可以使用 make docs 为它制作文档。然后您可以在 doc 中本地浏览它们。这样,您就可以保证拥有与您的 cowboy 版本相匹配的文档。