Haskell Scotty и Angularjs: функция jsonData перестала анализировать данные json, отправленные с помощью $http.post()

У меня есть приложение на Haskell/Scotty с Angularjs в качестве внешнего интерфейса. Он работал безупречно в отношении анализа JSON. Тогда это внезапно прекратилось без причины. Это произошло после некоторого повышения версии Скотти и его зависимостей.

Там не так много ошибок обратной связи от Скотти jsonData функция, которая анализирует тело JSON. Ни один из запросов POST от Angular не работает на данный момент. Я не могу понять, что случилось. Я не знаю, какой пример кода будет полезен, так как любой результат JSON POST приводит к jsonData - no parse ошибка. Это все, что я получаю. Вот несколько примеров кода.

Это контроллер, который передает простое имя пользователя и пароль

.controller('AuthCtrl', function($scope, authS, $rootScope) {
  $scope.auth = {local: false, uname: "", pass: ""};
  $scope.login = function() {
    authS.login($scope.auth);
  }
  $scope.logout = function() {
    $rootScope.user.uname = "";
    authS.logout();
  }

Это служба, которая отправляет данные JSON запроса POST в бэкэнд Scotty.

.factory('authS', function($http, $location, flashS, $rootScope) {
  return {
    login: function (d) {
      $http.post("/api/login", d)
      .success(function() {
        $rootScope.user.uname = d.uname;
        flashS.set("Login Success!", 'green');
        $location.path('/home');
      })
      .error(function() {
        flashS.set("Login Failure!", 'red', true);
      });
    })

Это модифицированная функция маршрута Скотти, чтобы попытаться поймать ошибку исключения

post "/api/login" $ loginUser `rescue` \e -> do
    b <- decodeUtf8 <$> body
    error $ unpack $ mconcat [ "Error was: ", e, "\n"
                             , "Body was:  ", b, "\n"
                             ]

Это актуальный loginUser функция

--------------------------------------------------------------------------------------
-- | Manage user login
loginUser :: ActionD ()
loginUser = do
  j <- jsonData
  error "passed the problem ..."
  let h = jdataDoc j
      u = at "uname" h
      p = at "pass" h
      l = at "local" h
  a <- if l then authDB u p else liftIO $ authAD u p
  if a then putInSession "uname" u else status unauthorized401

Ничто не выходит за рамки j <- jsonData линия.

jsonData функция падает, и исключение дает мне

Error was: jsonData - no parse: 
Body was:  

Это все, что я получаю. Нет полезной ошибки и даже тела для анализа.

Если у кого-то были подобные проблемы, пожалуйста, помогите. Или, может быть, предложение о том, что могло пойти не так. Как я уже говорил, все работало отлично до какого-то глупого обновления.

Спасибо.

ОБНОВИТЬ

Похоже, я получил пустое тело. Поэтому возвращается ошибка синтаксического анализа json.

Изменение функции входа в систему на это

loginUser :: ActionD ()
loginUser = do
  j <- body
  if not $ LBS.null j then error ("Body:" ++ (LBS.unpack j)) else error "No body"

Возвращает мне пустое тело.

В то же время глядя на полезную нагрузку с консоли Chrome дает мне нормальное тело

Заголовки:

POST /api/login HTTP/1.1
Host: 0.0.0.0:3000
Connection: keep-alive
Content-Length: 42
Accept: application/json, text/plain, */*
Origin: http://0.0.0.0:3000
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36
Content-Type: application/json;charset=UTF-8
Referer: http://0.0.0.0:3000/login
Accept-Encoding: gzip,deflate
Accept-Language: en-US,en;q=0.8,ru;q=0.6,en-GB;q=0.4
Cookie: scottysid=1CVBcS09G4PKktG8XkyPHu8JjBj0FmhaltjmIprX

Тело:

{"local":false,"uname":"Foo","pass":"Bar"}

Заголовки ответа:

Content-Type:text/plain; charset=utf-8
Date:Mon, 15 Sep 2014 07:40:45 GMT
Server:Warp/3.0.1.1

0 ответов

Другие вопросы по тегам