iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 18
1
Modern Web

用Elixir學習後端煉金術系列 第 18

Day 18 |> 使用Plug.Router實現路由

使用Plug.Router這個模組,我們可以輕鬆完成http router的功能。
根據不同的 path 還有 request method,我們可能會導向不同的請求。

首先,承上一章節,我們修改application.ex

    children = [
      # {Plug.Cowboy, scheme: :http, plug: ExamplePlug, options: [port: 4001]} # 註解掉
      Plug.Adapters.Cowboy.child_spec(
        scheme: :http,
        plug: TestApp.Router,
        options: [port: 4001]
      )
    ]

然後,新增TestApp.Router這個模組:

lib/test_app/router.ex

defmodule TestApp.Router do
  use Plug.Router # 引入路由模組

  plug :match
  plug :dispatch

  get "/page1" do
    send_resp(conn, 200, "page1")
  end

  get "/page2" do
    send_resp(conn, 200, "page2")
  end

  match _ do
    send_resp(conn, 404, "Page not found")
  end
end

這邊的:match和:dispatch是他需要的兩個插件。 :match負責查找匹配的路由,然後轉發到:dispatch派發工作。

重新執行mix run --no-halt,檔案會被重新編譯。便可以經由瀏覽器看到結果。

https://ithelp.ithome.com.tw/upload/images/20201003/20111629yNFSf33sgi.png

https://ithelp.ithome.com.tw/upload/images/20201003/20111629YNlPrU3HQ1.png


Poison
poison 是毒藥的意思,在Elixir社群裡面,好像有許多這種中二的名稱 (?)
Posion這個套件,可以做倒 json encode 跟 decode 的功能,甚至不只是 json,還支援許多的格式,是個非常方便的套件。

首先先安裝poison,更新mix.exs後,執行mix deps.get:

defp deps do
    [
      {:plug_cowboy, "~> 2.0"},
      {:poison, "~> 3.1"}
      # {:dep_from_hexpm, "~> 0.3.0"},
      # {:dep_from_git, git: "https://github.com/elixir-lang/my_dep.git", tag: "0.1.0"}
    ]
end

然後修改:
lib/test_app/router.ex


  get "/page1" do
    content = Poison.encode!(%{name: "Jack", age: 27})
    send_resp(conn, 200, content)
  end

這樣就完成了,藉由poison,我們就可以完成一個簡單的API了~

https://ithelp.ithome.com.tw/upload/images/20201004/20111629oqMzcbOt3S.png


上一篇
Day 17 |> 在監督模式下啟動 Http Server
下一篇
Day 19 |> 用 Ecto 存取資料庫資料
系列文
用Elixir學習後端煉金術30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言