0
간단한 휴식 API를 쓰려고합니다. Database.SQLite.Simple, Scotty 및 Aeson을 사용합니다. ScottyM() 라우트 기능 내에서 DB 쿼리에 문제가 있습니다. 내가 이런 식으로 할 때Haskell 데이터베이스 쿼리 ScottyM() 함수 내
routes :: [User] -> ScottyM()
routes allUsers = do
get "https://stackoverflow.com/users/:id" $ do
id <- param "id"
json ([x | x <- allUsers, userId x == id] !! 0)
main = do
conn <- open "data.db"
users <- (query_ conn "select id, first_name, second_name, team from users" :: IO [User])
scotty 3000 (routes users)
모든 것이 잘 작동하지만,이 시나리오에서는 모든 사용자가 서버 시작시 한 번만 업데이트됩니다. 누구나 질문 할 때마다 질문하고 싶습니다. 오류가
Couldn't match expected type ‘Web.Scotty.Internal.Types.ActionT
Text IO [a0]’
with actual type ‘IO [User]’
In a stmt of a 'do' block:
users <- (query_
conn "select id, first_name, second_name, team from users" ::
IO [User])
In the second argument of ‘($)’, namely
‘do { id <- param "id";
users <- (query_
conn "select id, first_name, second_name, team from users" ::
IO [User]);
json (users !! id) }’
In a stmt of a 'do' block:
get "https://stackoverflow.com/users/:id"
$ do { id <- param "id";
users <- (query_
conn "select id, first_name, second_name, team from users" ::
IO [User]);
json (users !! id) }
어떻게 문제를 해결하기 위해
routes :: Connection -> ScottyM()
routes conn= do
get "https://stackoverflow.com/users/:id" $ do
id <- param "id"
users <- (query_ conn "select id, first_name, second_name, team from users" :: IO [User])
json (users !! id)
main = do
conn <- open "data.db"
scotty 3000 (routes conn)
내가 얻을 : 그래서 내가 쓴? 또한 예를 들어 싶다면 SQL 쿼리에 인수를 전달할 수 있습니까?
select * from users where id = id from parameters
?