簡體   English   中英

Elixir - 如何使用 Cowboy(僅此而已)管理路線?

[英]Elixir - How do I manage routes using Cowboy (and nothing else)?

我僅限於將 Cowboy 用於 web 服務器,該服務器處理 JSON REST ZDB9744A7387143CACE1463 我需要能夠只使用 Cowboy + 任何語言功能來管理和處理不同和可變的路線,以及使用 GET 值。

我得到了以下例程中解釋的路徑:

def handle(req, router) do
  headers = [{"content-type", "application/json"}]
  {path, req}  = :cowboy_req.path(req)
  {:ok, resp} = :cowboy_req.reply(200, headers, router.call(path), req)
  {:ok, resp, router}
end

最終route.call(path)調用以下內容:

defp serve("/call/[:thing]") do
  list = [path: "oy"]
  IO.puts :thing
  {status, result} = JSON.encode(list)
  result
end

就其本身而言, serve("/call")返回 JSON 沒有問題,但嘗試在/call下向服務器請求任何其他路由,使其以404響應響應(已由我處理)。

處理這些動態路由時最好的方法是什么? 請記住,我僅限於使用 Cowboy 而沒有其他任何東西。

您的代碼不是很清楚-您是如何啟動服務器的? 更具體地說,您是如何設置路由器的? 這似乎是這里的問題,我猜你只為/call做了一條路線。

你需要這樣的東西:

dispatch_config = :cowboy_router.compile([{:_, [{"/call/[:thing]", YourHandlerModule, []}]}])
{ :ok, _ } = :cowboy.start_http(:http,
                                100,
                                [{:port, 8080}],
                                [{ :env, [{:dispatch, dispatch_config}]}]
                                )

路徑/call/[:thing]應該在路由器上指定,而不是在你的處理程序中。

我只使用 Cowboy 和 Elixir 找到了一個簡單的解決方案:

def call(conn) do
  serve(conn.req_path, conn)
end

defp serve(<< "/call/", name::binary >>, conn) do
  list = conn.req_qs
  IO.puts name
  {_, result} = JSON.encode(list)
put_resp_body(conn, result)

如果您這樣做,則所有后續路線都保留在rest中。 一個簡單的拆分就可以了。 conn帶有查詢字符串,因此我可以從那里獲取值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM