我正在根据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