iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 16
1

今天的介紹延續上一篇所生成的專案目錄。

Plug是Elixir官方維護的一個套件,能幫助我們完成web相關的應用。

官方githug的介紹中,提到了Plug的兩個功能。

  1. A specification for composable modules between web applications
  2. Connection adapters for different web servers in the Erlang VM

第一點可以理解為,Plug用來規範在web應用程序中,使用(組合)模組的一種方式。
第二點則可以理解為,Plug可以跟各種不同的Erlang VM上的 web server 做介接。


要使用plug前,我們第一步會先需要與plug做接介的 web server,而最常被使用的則是 cowboy 這個 web server。

透過在mix.exs中新增依賴套件plug_cowboy,並執行mix deps.get,便可以完成cowboy的安裝。

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

要使用plug前,我們需要先簡單瞭解他的規範。以下這是一個簡單的自定義的模組Plug的範例:

lib/ExamplePlug.ex

defmodule ExamplePlug do
  import Plug.Conn

  def init(options) do
    # 對選項進行初始化及整理
    options
  end

  def call(conn, _opts) do
    # 此Plug要執行的內容
    conn
    |> put_resp_content_type("text/plain")
    |> send_resp(200, "Hello world")
  end
end

如上例,一個簡單的Module Plug會有至少兩個function,init 跟 call,init會接收調用插頭時所帶入的參數,call則會第一個參數接收Plug的Conn Struct,第二個參數為init回傳的值。

那我們現在在iex中,簡單的透過這個ExamplePlug,將http server給運行起來。

iex.bat -S mix
iex(1)> c "lib/example_plug.ex"
[ExamplePlug]
iex(2)> {:ok, _} = Plug.Cowboy.http ExamplePlug, []
{:ok, #PID<0.638.0>}

使用 Plug.Cowboy.http 這個函式,分別帶入要執行的Plug名稱,已及options。

便可以在http://localhost:4000/ 看到結果了。
https://ithelp.ithome.com.tw/upload/images/20201001/20111629lYjkiqMdzo.png


在這篇文章簡單的示例如何用plug去介接cowboy server,並簡單的將一個plug運行在http server上,但實際上,plug可以做成許多的小功能,並且在一個請求裡,可以經過多個 plug 處理,使用上跟nodejs框架的中介層有著類似的感覺。
且藉由同樣的規範,就可以簡單達到便可以做到社區套件的一致性。


上一篇
Day 15 |> 用Mix做出一個簡單的專案
下一篇
Day 17 |> 在監督模式下啟動 Http Server
系列文
用Elixir學習後端煉金術30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言