Middleware
имеет тип Application -> Application
. Итак, если вы хотите превратить someApplication
в Middleware
, вы можете сделать это так:
staticMiddleware :: Middleware
staticMiddleware = \app -> someApplication
Вы отбрасываете аргумент, который является Application
, и возвращаете желаемое приложение, и теперь у вас есть Middleware
!
Вероятно, не очень полезно Middleware
. Возможно, вы захотите посмотреть на запрос, чтобы понять, как с ним справиться? Например, некоторые запросы будут обрабатываться этим промежуточным программным обеспечением статического сервера, а другие будут обрабатываться вашим обычным сервером?
Возможно, вы могли бы сделать что-то вроде этого:
someMiddleware :: Middleware
someMiddleware = \app -> branchingApp
branchingApp :: Application
branchingApp req functionReqToRecieved =
if iWantToStaticServeThis req
then staticApp req functionReqToRecieved
else dynamicApp req functionReqToRecieved
Это ужасный код, поэтому, пожалуйста, не копируйте, но я надеюсь, что это донесет идею?
Application
— это функция: Request -> (Response -> IO
ResponseReceived) -> IO ResponseReceived
. Я хочу сказать, как использовать этот первый аргумент (запрос). Таким образом, вместо того, чтобы сказать, что этот Middleware
возвращает это предопределенное приложение, я создаю свое собственное Application
, которое просто смотрит на Request
и решает, какой Application
должен его обрабатывать. Затем он передает аргументы обратно в Application
.
Возможно, где-то есть вспомогательная функция, которая сделает это за вас, но я не уверен.
person
Libby
schedule
19.01.2017