我正在尝试使用shield构建一个Oauth2服务器(称为Oauth2srv)。但这不是问题所在。示例代码基本上是这样说的:
scope "/", Shield do
pipe_through :api
get "/apps", AppController, :index
.. etcetera ..
end
Shield模块处于依赖关系中,因此驻留在deps / shield中。所有路线也都在那里。 现在我想在我自己的模块中添加一个到控制器的路径,如下所示:
scope "/", Shield do
pipe_through :api
get "/apps", AppController, :index
get "/*", Oauth2srv.CatchallController, :catch_it
end
CatchallController位于web / controllers / catchall_controller.ex中。但是范围似乎期望同一目录中的所有控制器,并且编译器会抛出一个错误:function Shield.Oauth2srv.CatchallController.init/1 is undefined
。
我需要做什么?
答案 0 :(得分:1)
最有可能的是,您需要使用不同的范围。当你做了
scope "/", Shield do
get "/apps", AppController, :index
end
你说你有一个名为Shield.AppController
的模块,所以当你在Shield
范围内添加catch all路径时,你告诉编译器你有一个Shield.CatchallController
模块。
但是,根据您的错误,编译器正在寻找Shield.Oauth2srv.CatchallController
(请注意Oauth2srv
)。所以你要么没有提供所有信息,要么就会发生其他事情。
如果这些是您在应用程序中定义的唯一2条路线,则可以执行类似
的操作scope "/" do
get "/apps", Shield.AppController, :index
get "/*", MyApp.CatchallController, :catch_it
end
如果您有更多,则可能需要指定多个范围。像
这样的东西scope "/", Shield do
get "/apps", AppController, :index
get "/something_else, OtherController, :foo
...
end
scope "/", MyApp do
get "/*", CatchallController, :catch_it
# Other routes that are important to your application
...
end