如何在凤凰应用程序中使用瘾君子来修复错误



我正在根据https://github.com/trenpixster/addict.

的说明,在phoenix应用程序中实现用户身份验证。

这是我遇到的错误:

[error] #PID<0.549.0> running Myapp.Endpoint terminated
Server: localhost:4000 (http)
Request: GET /register
** (exit) an exception was raised:
    ** (UndefinedFunctionError) function Myapp.Addict.AddictController.init/1 is undefined (module Myapp.Addict.AddictController is not available)
        Myapp.Addict.AddictController.init(:register)
        (myapp) web/router.ex:1: anonymous fn/1 in Myapp.Router.match_route/4
        (myapp) lib/phoenix/router.ex:261: Myapp.Router.dispatch/2
        (myapp) web/router.ex:1: Myapp.Router.do_call/2
        (myapp) lib/myapp/endpoint.ex:1: Myapp.Endpoint.phoenix_pipeline/1
        (myapp) lib/plug/debugger.ex:123: Myapp.Endpoint."call (overridable 3)"/2
        (myapp) lib/myapp/endpoint.ex:1: Myapp.Endpoint.call/2
        (plug) lib/plug/adapters/cowboy/handler.ex:15: Plug.Adapters.Cowboy.Handler.upgrade/4
        (cowboy) /Users/development/Desktop/myapp/deps/cowboy/src/cowboy_protocol.erl:442: :cowboy_protocol.execute/4

这是我的web/router.ex文件:

defmodule Myapp.Router do
  use Myapp.Web, :router
  use Addict.RoutesHelper
  pipeline :browser do
    plug :accepts, ["html"]
    plug :fetch_session
    plug :fetch_flash
    plug :protect_from_forgery
    plug :put_secure_browser_headers
  end
  pipeline :api do
    plug :accepts, ["json"]
  end
  scope "/", Myapp do
    pipe_through :browser # Use the default browser stack
    get "/", PageController, :index
    get "/about", PageController, :about 
    get "/thanks", PageController, :thanks
    resources "/projects", ProjectController
    addict :routes
  end
  # Other scopes may use custom stacks.
  # scope "/api", Myapp do
  #   pipe_through :api
  # end
end

为什么会发生此错误?如何解决此问题?

预先感谢。

将模块别名传递给 scope将对该模块的所有控制器进行预处理,包括addict路由,这将使它们指向错误的控制器(Myapp.Addict.AddictController而不是Addict.AddictController))。您可以将addict :routes移至另一个范围,而无需别名模块来解决此问题:

scope "/", Myapp do
  pipe_through :browser # Use the default browser stack
  get "/", PageController, :index
  get "/about", PageController, :about 
  get "/thanks", PageController, :thanks
  resources "/projects", ProjectController
end
scope "/" do
  addict :routes
end

最新更新