API-интерфейс Rails, выбрасывающий статус -1
У меня есть приложение Rails API с включенным CORS.
Однако в моем внешнем угловом коде, когда я достигаю той же самой конечной точки, функция $resource $save не выполняет обратный вызов успеха. Он возвращает следующие данные от конечной точки в обратном вызове ошибки -
{"data":null,"status":-1,"config":{"method":"POST","transformRequest":[null],"transformResponse":[null],"data":{"session":{"email":"shahravi@gmail.com","password":"foobar"}},"url":"http://localhost:3000/sessions.json","headers":{"Accept":"application/json, text/plain, */*","Content-Type":"application/json;charset=utf-8"}},"statusText":""}
Я прочитал, что статус "-1" означает, что с включением CORS что-то не так. Но я не могу понять, что это будет.
Чтобы включить CORS, я установил гем 'rack-cors', и у меня в приложении rails есть следующее
class Application < Rails::Application
# Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers
# -- all .rb files in that directory are automatically loaded.
# Only loads a smaller set of middleware suitable for API only apps.
# Middleware like session, flash, cookies can be added back manually.
# Skip views, helpers and assets when generating a new resource.
config.api_only = true
config.middleware.insert_before 0, "Rack::Cors" do
allow do
origins '*'
resource '*', :headers => :any, :methods => [:get, :post, :options]
end
end
config.middleware.use ActionDispatch::Cookies
end
Я что-то пропустил, чтобы включить CORS? Почему мое приложение rails возвращает статус = -1?
Еще одно копание показало, что сервер отправляет правильные заголовки в ответ на запрос, поэтому задаюсь вопросом, что может быть не так на этом этапе -
>> curl -H "Origin:*" -I http://localhost:3000/users/1
HTTP/1.1 200 OK
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Content-Type: application/json; charset=utf-8
ETag: W/"ec1e530cfc19612936b356773d26df36"
Cache-Control: max-age=0, private, must-revalidate
X-Request-Id: c721b55a-148a-4b5b-8cd5-9fcb772477e7
X-Runtime: 0.022036
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS, UPDATE, DELETE
Access-Control-Max-Age: 1728000
Access-Control-Allow-Credentials: true
Vary: Origin
и CORS, кажется, правильно вставлен в приложение рельсов
>> bundle exec rake middleware
use Rack::Cors
use Rack::Sendfile
use ActionDispatch::Static
use ActionDispatch::Executor
use ActiveSupport::Cache::Strategy::LocalCache::Middleware
use Rack::Runtime
use ActionDispatch::RequestId
use Rails::Rack::Logger
use ActionDispatch::ShowExceptions
use ActionDispatch::DebugExceptions
use ActionDispatch::RemoteIp
use ActionDispatch::Reloader
use ActionDispatch::Callbacks
use ActiveRecord::Migration::CheckPending
use Rack::Head
use Rack::ConditionalGet
use Rack::ETag
use ActionDispatch::Cookies
run Api::Application.routes