MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Scotty usando o MongoDB


mongoDB é genérico o suficiente para funcionar em qualquer mônada que seja instância de MonadBaseControl IO e MonadIO .

Por exemplo, você pode escolher IO mônada. Nesse caso, você precisa de liftIO . runQuery dentro da ação de scotty:
import Web.Scotty
import Database.MongoDB
import qualified Data.Text.Lazy as T
import Control.Monad.IO.Class

runQuery :: Pipe -> Query -> IO [Document]
runQuery pipe query = access pipe master "nutrition" (find query >>= rest) 

main = do
  pipe <- connect $ host "127.0.0.1"
  scotty 3000 $ do
    get "/" $ do
      res <- liftIO $ runQuery pipe (select [] "stock_foods")
      text $ T.pack $ show res

Depois de @Sebastian Philipp adicionado MonadBaseControl instância para Scotty.ActionT , não há necessidade de levantar nada. Você pode trabalhar de forma transparente com o formulário scotty do mongoDB. Basta alterar a assinatura de tipo e soltar liftIO s:
runQuery :: Pipe -> Query -> ActionM [Document]
...
    get "/" $ do
      res <- runQuery pipe (select [] "stock_foods")
      text $ T.pack $ show res