牛仔routing guide表示每条路径都是一个元组,其中包含“初始化时将给予它[请求处理程序]的选项”。但它没有解释选项的目的,我不知道如何使用它们,因为传递给处理程序的Req对象包含有关路径及其绑定的信息。
因此,如果路由选项不包含任何唯一路径信息,那么它们具有哪些用例?
答案 0 :(得分:4)
选项传递给处理程序init/3
方法。在handlers guide中有使用翻译选项的示例。您可以使用多个路径指向同一个处理程序,使用不同的选项:
{"/pl", toppage_handler, [{lang, fr}]}
{"/en", toppage_handler, [{lang, en}]}
在处理程序中,你可以这样:
-record(state, {
lang :: en | fr
%% More fields here.
}).
init(_Type, Req, Opts) ->
{_, Lang} = lists:keyfind(lang, 1, Opts),
{ok, Req, #state{lang=Lang}}.
handle(Req, State#state{lang = Lang}) ->
{ok, Req2} = cowboy_req:reply(200, [
{<<"content-type">>, <<"text/plain">>}
], translate_text(<<"Hello World!">>, Lang), Req),
{ok, Req2, State}.
另一个例子是从主机名获取语言。例如,您可以根据获得请求的主机检测语言。
[{'fr.example.org', [
{"/", toppage_handler, [{lang, fr}]
]},
{'en.example.org', [
{"/", toppage_handler, [{lang, en}]
].
您可以使用PathMatch
和HostMatch
实现相同的目标,语言值绑定将在Req
中,但选项更为通用。路由选项用于创建其他信息并将其传递给处理程序。