yesod 添加处理程序导致错误
yesod add-handler results in error
我遵循了此处列出的 6 个步骤 http://www.yesodweb.com/page/quickstart(第一步除外,b/c 我已经有了堆栈),并且一切正常。但是,当我尝试 运行 stack exec -- yesod add-handler
时,我得到以下输出:
Name of route (without trailing R): A
Enter route pattern (ex: /entry/#EntryId): /a
Enter space-separated list of methods (ex: GET POST): GET
yesod: Application.hs: openFile: does not exist (No such file or directory)
我也用yesod-postgres
堆栈模板试过了,得到了同样的结果。有什么想法吗?
编辑:看起来这已经是一个问题 https://github.com/yesodweb/yesod/issues/1413。
正如问题中所指出的,添加处理程序在脚手架更新中被破坏。
但是,您可以自己添加路线。假设您想在 /NewRoute 为 GET 请求添加一个路由,并将资源命名为 NewRouteR
在新行中添加 config/routes
文件中的新路由
/NewRoute NewRouteR GET
在 Handler 目录中创建一个新文件 - NewRoute.hs 使用此默认内容
module NewRoute where
import Import
getNewRoute :: Handler Html
getNewRoute = error "Route not implemented : NewRoute"
将此添加到 Application.hs
中的导入列表
import Handler.NewRoute
也将其添加到.cabal 文件中的暴露模块列表
exposed-modules:
Handler.NewRoute
也看你是否需要脚手架提供的认证,将这条路由添加到Foundation.hs
中Yesod App
实例的模式列表中
isAuthorized NewRouteR _ = return Authorized -- No authentication
-- or --
isAuthorized NewRouteR _ = isAuthenticated
我遵循了此处列出的 6 个步骤 http://www.yesodweb.com/page/quickstart(第一步除外,b/c 我已经有了堆栈),并且一切正常。但是,当我尝试 运行 stack exec -- yesod add-handler
时,我得到以下输出:
Name of route (without trailing R): A
Enter route pattern (ex: /entry/#EntryId): /a
Enter space-separated list of methods (ex: GET POST): GET
yesod: Application.hs: openFile: does not exist (No such file or directory)
我也用yesod-postgres
堆栈模板试过了,得到了同样的结果。有什么想法吗?
编辑:看起来这已经是一个问题 https://github.com/yesodweb/yesod/issues/1413。
正如问题中所指出的,添加处理程序在脚手架更新中被破坏。
但是,您可以自己添加路线。假设您想在 /NewRoute 为 GET 请求添加一个路由,并将资源命名为 NewRouteR
在新行中添加
config/routes
文件中的新路由/NewRoute NewRouteR GET
在 Handler 目录中创建一个新文件 - NewRoute.hs 使用此默认内容
module NewRoute where import Import getNewRoute :: Handler Html getNewRoute = error "Route not implemented : NewRoute"
将此添加到
中的导入列表Application.hs
import Handler.NewRoute
也将其添加到.cabal 文件中的暴露模块列表
exposed-modules: Handler.NewRoute
也看你是否需要脚手架提供的认证,将这条路由添加到
中Foundation.hs
Yesod App
实例的模式列表中isAuthorized NewRouteR _ = return Authorized -- No authentication -- or -- isAuthorized NewRouteR _ = isAuthenticated