今天的介紹延續上一篇所生成的專案目錄。
Plug是Elixir官方維護的一個套件,能幫助我們完成web相關的應用。
從官方githug的介紹中,提到了Plug的兩個功能。
第一點可以理解為,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/ 看到結果了。
在這篇文章簡單的示例如何用plug去介接cowboy server,並簡單的將一個plug運行在http server上,但實際上,plug可以做成許多的小功能,並且在一個請求裡,可以經過多個 plug 處理,使用上跟nodejs框架的中介層有著類似的感覺。
且藉由同樣的規範,就可以簡單達到便可以做到社區套件的一致性。