Ứng dụng của tôi sử dụng bookmarklet và tôi cần cho phép CORS MyRouteR
để mã bookmarklet của tôi có thể sử dụng tuyến đường này cho các yêu cầu AJAX.Cho phép các yêu cầu xuất xứ chéo trong Yesod
Trong bản nháp đầu tiên của cấu hình/tuyến đường tôi đã cung cấp MyRouteR
hỗ trợ chỉ cho một phương thức yêu cầu, PUT. Nhưng hóa ra là (duh) tôi cũng cần hỗ trợ phương pháp OPTIONS, trình duyệt nào sử dụng các yêu cầu preflight của CORS.
tôi đã kết thúc những điều sau đây config/tuyến:
/myroute MyRouteR PUT OPTIONS
tôi đã loại hy vọng sẽ có một số máy móc có liên quan trong Template Haskell rằng quá trình config/tuyến đường để việc bổ sung các tùy chọn để này danh sách phương thức của tuyến đường sẽ tự động dẫn đến sự hỗ trợ của CORS, nhưng không có súc sắc. Không phải là kết thúc của thế giới, nhưng nó sẽ có ý nghĩa và cảm thấy thanh lịch theo cách đó.
Để làm CORS công việc, tôi đã đưa ra lộ trình một handler OPTIONS:
optionsMyRouteR :: Handler RepPlain
optionsMyRouteR = do
addHeader "Access-Control-Allow-Origin" "*"
addHeader "Access-Control-Allow-Methods" "PUT, OPTIONS"
return $ RepPlain $ toContent ("" :: Text)
putMyRouteR :: Handler RepJson
putMyRouteR = do
addHeader "Access-Control-Allow-Origin" "*"
-- more stuff ...
này hoạt động, nhưng nó cảm thấy hơi un-Yesodic vì nó rất soạn sẵn. Vì vậy, hai câu hỏi:
- Chúng ta có tính từ tốt hơn Yesodic không?
- Có cách nào khác, cách tốt hơn để cho phép tuyến đường hỗ trợ các yêu cầu có xuất xứ gốc không?
tôi đã thay đổi 'setHeader' cho 'addHeader' trên vì' setHeader' đã bị phản đối trong thời gian trung bình –