Я использую 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 и индексном файле моего интерфейса.
Я что-то упустил?
Не уверен, что я понимаю, что происходит. Но из-за внешнего вида вашего сообщения это то, что я понял (мой английский не безупречен):
Если это имеет смысл, можете ли вы его проверить?
Кажется, угловатый не делает запрос, ожидающий json. И рельсы нуждаются в этом явном (ваша команда curl явно запрашивает json-формат)
В вашем угловом коде вы можете попробовать изменить URL- url: '/api/users'
url: '/api/users.json'
url: '/api/users'
для url: '/api/users.json'
. Вы также можете проверить, как отправить ожидаемое application/json
типа контента application/json
из углового.
Прокси-сервер, казалось, направил вызов localhost: 9000 на сервер, но ответ оставался содержимым HTML файла индексного файла front-end. Я не уверен, какова была настоящая проблема, и не уверены в этом типе вещей. Я исправил это, отправив запрос $ http POST на localhost: 3000, а не на localhost: 9000.
curl
ваш URL-адрес являетсяhttp://localhost:9000/api/users.json
, а в вызове$http
URL-адрес -/api/users