Путаница: AngularJS $ http POST-ответ возвращает HTML-содержимое индексного файла

0

Я использую AngularJS, который использует API Ruby on Rails для аутентификации. Я использую службу $ http в AngularJS для регистрации пользователя, использующего запрос POST для бэкэнд, однако я запутался, так как ответ, который я получаю, всегда возвращается в HTML, и он имеет индексную страницу, а не фактические данные из API-интерфейсы. Я тестирую это в своей локальной среде, где приложение AngularJS работает на localhost: 9000, а Rails API - на localhost: 3000. AngularJS использует прокси-сервер, который направляет запросы на порт 3000.

Я тестировал ответ Rails API, используя команды curl:

$ curl -H "Content-Type: application/json" -d '{"user":{"email":"[email protected]","password":"12345678"}}' -X POST http://localhost:9000/api/users.json

который возвращает ответ от сервера как:

{"success":true,"info":"Registered","data":{"user":{"id":5,"created_at":"2016-04-24T14:13:24.289Z","updated_at":"2016-04-24T14:13:24.298Z","email":"[email protected]","authentication_token":"-49zyhbCiddYdjssQx6i"},"auth_token":"-49zyhbCiddYdjssQx6i"}}

Вот код в интерфейсе, который находится в контроллере AngularJS:

 $scope.register = function() {
            $http({
                url: '/api/users',
                method: 'POST',
                data: {
                    user: $scope.user
                }
            }).then(
                // success
                function(response) {
                    console.log(response.data);
                    console.log(response.auth_token);
                    tokenHandler.set( response.auth_token );
                    $location.path('/');
                },
                // error
                function(response) {
                    $scope.user.errors = response;
                });
        };

Вот код ответа сервера:

class Users::RegistrationsController < Devise::RegistrationsController
respond_to :json

def create
build_resource(sign_up_params)

if resource.save
  sign_in resource
  render status: 200,
         json: {
             success: true,
             info: "Registered",
             data: {
                 user: resource,
                 auth_token: current_user.authentication_token
             }
         }
else
  # Otherwise fail
  render status: :unprocessable_entity,
         json: {
             success: false,
             info: resource.errors,
             data: {}
         }
end
end
end

Однако ответ, когда я вызываю метод register, всегда находится в HTML и индексном файле моего интерфейса.

Я что-то упустил?

  • 4
    В вашем вызове curl ваш URL-адрес является http://localhost:9000/api/users.json , а в вызове $http URL-адрес - /api/users
  • 0
    Я попытался использовать localhost: 9000 / api / users.json в вызове $ http, но он ответил так же, с HTML на странице индекса.
Теги:
rest
restful-authentication

3 ответа

0
Лучший ответ

Не уверен, что я понимаю, что происходит. Но из-за внешнего вида вашего сообщения это то, что я понял (мой английский не безупречен):

  • При вызове извне (Угловые приложения получают запрос) этот запрос переносится на порт 3000 (прокси). Следовательно, почему у вас есть правильный ответ от вызова "завитка".
  • Когда приложение "Угловое" делает запрос, оно не пересылается. Следовательно, почему запрос /api/users дает вам индекс Angular App (я полагаю, что есть неудачный маршрут для индексации или почему-то объяснить это поведение).

Если это имеет смысл, можете ли вы его проверить?

0

Кажется, угловатый не делает запрос, ожидающий json. И рельсы нуждаются в этом явном (ваша команда curl явно запрашивает json-формат)

В вашем угловом коде вы можете попробовать изменить URL- url: '/api/users' url: '/api/users.json' url: '/api/users' для url: '/api/users.json'. Вы также можете проверить, как отправить ожидаемое application/json типа контента application/json из углового.

0

Прокси-сервер, казалось, направил вызов localhost: 9000 на сервер, но ответ оставался содержимым HTML файла индексного файла front-end. Я не уверен, какова была настоящая проблема, и не уверены в этом типе вещей. Я исправил это, отправив запрос $ http POST на localhost: 3000, а не на localhost: 9000.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню