混淆:AngularJS $http POST 响应返回索引文件的 HTML 内容
Confusion: AngularJS $http POST response is returning HTML content of index file
我正在使用 AngularJS,它在 Rails API 上使用 Ruby 进行身份验证。我在 AngularJS 中使用 $http 服务使用 POST 请求向后端注册用户,但是,我很困惑,因为我得到的响应总是在 HTML 中返回并且它是索引页,而不是 rails API 中的实际数据。我正在我的本地环境中对此进行测试,其中 AngularJS 应用程序在 localhost:9000 上 运行,Rails API 在 localhost:3000 上。 AngularJS 正在使用将请求定向到端口 3000 的代理。
我已经使用 curl 命令测试了 Rails API 的响应:
$ curl -H "Content-Type: application/json" -d '{"user":{"email":"hi@hi.com","password":"12345678"}}' -X POST http://localhost:9000/api/users.json
来自服务器的 returns 响应为:
{"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":"hi@hi.com","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和我前端的索引文件
我是不是漏掉了什么?
代理似乎将localhost:9000调用定向到服务器,但响应一直是前端索引文件的HTML内容。我不确定实际问题是什么,也不确定这类问题。我通过将 $http POST 请求发送到 localhost:3000 而不是 localhost:9000 来解决这个问题。
似乎 angular 没有发出预期 json 的请求。 rails 需要明确的(你的 curl 命令明确要求 json 格式)
在您的 angular 代码中,您可以尝试将 url 从 url: '/api/users'
更改为 url: '/api/users.json'
。您还可以检查如何从 angular 发送预期的内容类型 application/json
。
不确定我明白发生了什么。但是从你的 post 来看,这是我的理解(我的英语不是完美的):
- 在外部调用时(Angular 应用程序收到请求),该请求被转发到端口 3000(代理)。因此,为什么您从 "curl" 调用中得到了正确的响应。
- 当Angular 应用发出请求时,它不会被转发。因此,为什么要求 /api/users 会让你获得 Angular 应用程序索引(我想有一个索引的故障安全路径或一些解释该行为的原因)。
如果这有意义,你能测试一下吗?
我正在使用 AngularJS,它在 Rails API 上使用 Ruby 进行身份验证。我在 AngularJS 中使用 $http 服务使用 POST 请求向后端注册用户,但是,我很困惑,因为我得到的响应总是在 HTML 中返回并且它是索引页,而不是 rails API 中的实际数据。我正在我的本地环境中对此进行测试,其中 AngularJS 应用程序在 localhost:9000 上 运行,Rails API 在 localhost:3000 上。 AngularJS 正在使用将请求定向到端口 3000 的代理。
我已经使用 curl 命令测试了 Rails API 的响应:
$ curl -H "Content-Type: application/json" -d '{"user":{"email":"hi@hi.com","password":"12345678"}}' -X POST http://localhost:9000/api/users.json
来自服务器的 returns 响应为:
{"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":"hi@hi.com","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和我前端的索引文件
我是不是漏掉了什么?
代理似乎将localhost:9000调用定向到服务器,但响应一直是前端索引文件的HTML内容。我不确定实际问题是什么,也不确定这类问题。我通过将 $http POST 请求发送到 localhost:3000 而不是 localhost:9000 来解决这个问题。
似乎 angular 没有发出预期 json 的请求。 rails 需要明确的(你的 curl 命令明确要求 json 格式)
在您的 angular 代码中,您可以尝试将 url 从 url: '/api/users'
更改为 url: '/api/users.json'
。您还可以检查如何从 angular 发送预期的内容类型 application/json
。
不确定我明白发生了什么。但是从你的 post 来看,这是我的理解(我的英语不是完美的):
- 在外部调用时(Angular 应用程序收到请求),该请求被转发到端口 3000(代理)。因此,为什么您从 "curl" 调用中得到了正确的响应。
- 当Angular 应用发出请求时,它不会被转发。因此,为什么要求 /api/users 会让你获得 Angular 应用程序索引(我想有一个索引的故障安全路径或一些解释该行为的原因)。
如果这有意义,你能测试一下吗?