2017-02-06 32 views
2

我在Plug.Conn上有一系列轉換,需要訪問中間結果。如何訪問在Elixir中通過管道運算符傳遞的參數?

n_conn = 
    conn 
    |> Plug.Conn.fetch_query_params() 
nn_conn = 
    n_conn 
    |> assign(:result, inspect(Timestamp.convert_datetime(n_conn.params))) 
nn_conn 
|> send_resp(200, nn_conn.assigns.result) 
|> halt() 

我需要n_conn因爲conn.params沒有設置直到Plug.Conn.fetch_query_params()被調用。同樣,我需要nn_conn,因爲n_conn.assigns.result沒有設置,直到assign/3函數被調用。

該代碼相當難看。如果有一種方法可以參考管道運營商的產出,我可以簡化它,如下所示。我希望&1能夠工作,但事實並非如此。

conn 
|> Plug.Conn.fetch_query_params() 
|> assign(:result, inspect(Timestamp.convert_datetime(&1.params))) 
|> send_resp(200, &1.assigns.result) 
|> halt() 

有沒有辦法解決這個問題?

回答

2

如果您只想通過管道執行此操作,則可以傳遞匿名函數,但需要it's ugly。我會重用名稱conn,而不是使用管道功能單一呼叫:

conn = Plug.Conn.fetch_query_params(conn) 
conn = assign(conn, :result, inspect(Timestamp.convert_datetime(conn.params))) 
conn 
|> send_resp(200, conn.assigns.result) 
|> halt() 

既然你似乎沒有使用conn.assigns.result,你可以跳過它存儲在assigns

conn = Plug.Conn.fetch_query_params(conn) 
result = inspect(Timestamp.convert_datetime(conn.params)) 
conn 
|> send_resp(200, result) 
|> halt() 
相關問題