Haskell 如何将删除请求卷曲到YesSOD?
我有一个小的JSON api,我正在YesSOD中构建它。为了测试API,我使用了cUrl。但是,以下请求返回不允许的Haskell 如何将删除请求卷曲到YesSOD?,haskell,yesod,Haskell,Yesod,我有一个小的JSON api,我正在YesSOD中构建它。为了测试API,我使用了cUrl。但是,以下请求返回不允许的405方法: curl-X DELETE-H“X-User-Name:$Name”-H“X-User-Token:$Token”-H“accept:application/json”http://localhost:3000/login 路由文件明确包含DELETE作为登录路由的一种方法。我正在使用defaultyesoddleware 以下是处理程序: -- ^ Invalid
405方法
:
curl-X DELETE-H“X-User-Name:$Name”-H“X-User-Token:$Token”-H“accept:application/json”http://localhost:3000/login
路由文件明确包含DELETE
作为登录路由的一种方法。我正在使用defaultyesoddleware
以下是处理程序:
-- ^ Invalidate the user token
deleteLoginR :: Handler Aeson.Value
deleteLoginR = authenticateUser >>= \u ->
let newU = u { DS.token = "" } in
DS.saveEntity newU >>= \case
Left e -> sendResponseStatus status500 (cs e :: Text)
Right _ -> sendResponseStatus status200 ("Logged out" :: Text)
以下是authenticateUser
功能:
{-| Check that a user is properly logged in using the authentication headers -}
authenticateUser :: Handler User
authenticateUser = lookupHeader "X-User-Name" >>= \case
Nothing ->
sendResponseStatus status406 ("X-User-Name not set" :: Text)
Just name ->
lookupHeader "X-User-Token" >>= \case
Nothing ->
sendResponseStatus status406 ("X-User-Token not set" :: Text)
Just token ->
(DS.loadEntities ["User"] constraints Nothing :: Handler (Either Text [User]))
>>= \case
Left e -> sendResponseStatus status500 (cs e :: Text)
Right records -> pure $ List.head records
where constraints = [ Where ("name", Equals, cs name)
, Where ("token", Equals, cs token)
]
及路线声明:
/login LoginR获取后期补丁删除
谁能启发我 修好了!这是堆栈中的某种缓存问题,它在堆栈中缓存了路由文件的旧版本。杀死
yesod-devel
并运行stack-build——强制脏掉它。向发送删除请求http://localhost:3000/login
似乎不合理。您确定已定义此路线吗?您可能想将delete发送到类似http://localhost:3000/logout
?也许您在语义上是对的,但这条路线肯定存在。您很可能需要为任何人提供源代码以找到问题的根源。