由于我的Haskell经验非常少,所以我真的很难绕过Snap。作为介绍,我正在尝试使用框架检查用户存在的示例。有人能告诉我如何调整下面的功能让我开始?这就是我现在所得到的。检查用户名是否存在后如何继续?
------------------------------------------------------------------------------
-- | Handle new user form submit
handleNewUser :: Handler App (AuthManager App) ()
handleNewUser = method GET handleForm <|> method POST handleFormSubmit
where
handleForm = render "new_user"
handleFormSubmit = do result <- usernameExists "login"
result <- createUser "login" "password" >> redirect "/"
return result
答案 0 :(得分:2)
尝试这样的事情。没有在ghc中检查它,但应该给你这个想法。
handleFormSubmit = do
exists <- usernameExists "someUserName"
case exists of
True -> writeBS "The username already exists"
False -> do
createUser "someUserName" "password"
redirect' "/" 301
使用redirect
后无法返回值,因为它将客户端路由到新页面。如果createUser
如果用户已经存在则抛出DuplicateLogin
错误,那么捕获该错误可能比执行检查更好,因为在检查和插入之间仍然可以将相同的用户名插入其他位置。不太可能,但可能。此外,您应该使用redirect'
,因为这表示永久重定向。