2014-12-01 43 views
0

我有一个问题与斯科蒂Web服务器现在 - rescue不工作unfound参数 - 我仍然得到一个404用下面的代码:斯科蒂和post数据

post "/newsletter/create" (do 
    (param "subscriber[email]") `rescue` (\msg -> text msg) 
    formContent <- param "subscriber[email]" 
    text $ "found! " ++ show formContent) 

我可以看到,当我仅使用params代替时,我的数据就在那里,并用“subscriber[email]”索引。 [逃跑有什么事吗?任何帮助将是巨大的。

回答

2

有了一些清理我得到它的工作:

{-# LANGUAGE OverloadedStrings #-} 

import Web.Scotty 
import qualified Data.Text.Lazy as TL 

main = scotty 3000 $ do 
    post "/newsletter/create" $ do 
    formContent <- (param "subscriber[email]") `rescue` (\msg -> return msg) 
    text $ "found! " `TL.append` formContent 

我做了一堆修改的,但关键的一点是,rescue用作围绕param的包装,不改变任何内部状态,因此,你不应该叫它两次。方括号并没有带来任何麻烦。

+0

这很有道理! DERP。谢谢。我想知道是不是'param_'或'params_'非破坏性函数是一个好主意...... – 2014-12-01 21:16:12

+0

我刚刚发现了一些真正吸引Scotty的东西 - 如果您从参数中拯救,您实际上不能使用参数: 'rescue:ActionM a - >(Text - > ActionM a) - > ActionM a' 如果你的处理程序是'ActionM()',那么你不能拉参数,因为它的类型是' ()',而不是'文本':( – 2014-12-04 20:35:40

+0

'get'本身强制单元类型:/ – 2014-12-04 20:36:41