在 Phoenix Framework 上放置辅助模块的位置

Where to put helper module on Phoenix Framework

我想添加一个辅助模块来使用

执行获取请求

http://hexdocs.pm/httpoison/HTTPoison.Base.html

但是当我把 defmodule 放在

/lib/Shopper/CallApi.ex

use

/web.ex

def controller do
quote do
  use Phoenix.Controller

  alias Shopper.Repo
  import Ecto.Model
  import Ecto.Query, only: [from: 1, from: 2]

  import Shopper.Router.Helpers

  use Shopper.CallApi
end

结束

编译器失败

== Compilation error on file web/controllers/page_controller.ex ==
** (UndefinedFunctionError) undefined function: Shopper.CallApi.__using__/1
    Shopper.CallApi.__using__([])
    web/controllers/page_controller.ex:2: (module)

所以...在哪里定义 CallApi.ex 以及我应该在哪里声明它?

当您调用 use Shopper.CallApi 时,会调用 __using__/1 宏 - 这是元编程特有的。如果您想在模块中使用 Shopper.CallApi 中定义的函数,请改用 alias Shopper.CallApi

aliasrequireimport 之间的差异记录在 Alias, Require and Import and using is documented in Domain Specific Languages 中。

顺便说一句,通常在 elixir 项目中,文件被命名为 snake_case - call_api.ex 而不是 CallApi.ex.