0

对于每个dir..,它都是 a Route,它接受 aRequest并返回ResponseServer. 我想知道代码的每一行中是否包含Request和。Response提前致谢!

simpleHTTP serverConf $ do
decodeBody (defaultBodyPolicy "/tmp/" 4096 4096 4096)
msum [ do
      nullDir
      seeOther "graph" (toResponse "Redirecting to /graph"),
      dir "grid" gridResponse,
      dir "graph" graphResponse,
      dir "image" graphImageResponse,
      dir "timetable-image" $ look "courses" >>= \x -> look "session" >>= timetableImageResponse x,
      dir "graph-fb" $ seeOther redirectUrlGraphEmail $ toResponse "",
      dir "post-fb" $ seeOther redirectUrlGraphPost $ toResponse "",
      dir "test" $ look "code" >>= getEmail,
      dir "test-post" $ look "code" >>= postToFacebook,
      dir "post" postResponse,
      dir "draw" drawResponse,
      dir "about" $ aboutResponse aboutContents,
      dir "privacy" $ privacyResponse privacyContents,
      dir "static" $ serveDirectory DisableBrowsing [] staticDir,
      dir "course" $ look "name" >>= retrieveCourse,
      dir "all-courses" $ liftIO allCourses,
      dir "graphs" $ liftIO queryGraphs,
      dir "course-info" $ look "dept" >>= courseInfo,
      dir "depts" $ liftIO deptList,
      dir "timesearch" searchResponse,
      dir "calendar" $ lookCookieValue "selected-lectures" >>= calendarResponse,
      dir "get-json-data" $ look "graphName" >>= \graphName -> liftIO $ getGraphJSON graphName,
      dir "loading" $ look "size" >>= loadingResponse,
      dir "save-json" $ look "jsonData" >>= \jsonStr -> look "nameData" >>= \nameStr -> liftIO $ saveGraphJSON jsonStr nameStr,
      notFoundResponse
]
4

1 回答 1

0

每行都是一个处理程序。将处理程序视为接受请求并返回响应的函数。

graphReponse是以某种方式处理请求的处理程序。

dir修改处理程序,使其不会被调用,除非请求 url 以某种方式开始。

Response在处理程序的名称中使用这个词并没有什么特别之处。graphResponse只是一个函数的名称——你可以为你的处理函数使用任何名称。

您拥有的是处理程序列表,例如:

[ handler1,
  handler2,
  ...,
  notFoundResponse
]

当请求进来时,会检查是否handler1会处理该请求。如果不是,handler2则检查等等。如果没有处理程序接受请求,notFoundHandler则调用它可能会生成 404 页面。

这就是该dir ...部分很重要的原因 - 它阻止处理程序响应,除非 url 以某种方式开始。

于 2016-06-15T20:16:58.280 回答