$http({
method: "POST",
url: "http://myapp.herokuapp.com/angular",
data: {message: $scope.newChat}
})
我认为如果我启用它来接收JSON,那就没问题了,但是我仍然在OPTIONS方法中遇到404错误:
require 'rubygems'
require 'sinatra'
require 'sinatra/json'
require 'json'
post '/angular' do
data = JSON.parse(request.body.read)
json data
end
但它没有用。我需要在angularJS端和sinatra服务器端进行更改才能接受帖子并将响应发送回客户端?
答案 0 :(得分:1)
我正在假设这是一个交叉来源请求。如果是这种情况,由于安全原因,默认情况下禁用CORS;应该如此。
您需要启用CORS;在Sinatra我通常使用sinatra-cross_origin扩展。
要为整个服务启用CORS,您可以使用以下内容。
require 'sinatra'
require 'sinatra/cross_origin'
configure do
enable :cross_origin
end
要仅启用特定路线,它看起来更像是如下。
get '/cross_origin' do
cross_origin
"This is available to cross-origin javascripts"
end
确保您意识到这会带来很大的安全风险,并且您正在适当地降低风险。
以下示例将允许连接任何源,在开放式Web服务的情况下可能是您需要的。
set :allow_origin, :any
另一方面,如果可能,你可以限制它
set :allow_origin, 'http://example.com'
如果您需要将其作为完整的Web服务打开到任何来源,那么您将需要考虑其他安全措施,如TLS和OAuth,但这有点超出了这个问题的范围。