2

Ember Getting Started ガイドに従って TodoMVC アプリを構築しようとしていますが、バックエンドとして Rails で Ember-CLI を使用しています。残念ながら、クロス サイト ドメインに関する問題が発生しています。投稿リクエストをしようとすると、次のエラー メッセージが表示されます。

XMLHttpRequest cannot load http://localhost:3000/api/todos. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access.

Rails 側には、Rack Cors がインストールされています。Gemfile に追加しました:

gem 'rack-cors', :require => 'rack/cors'

そして、私のapplication.rbファイルには次のものがあります。

module Todoemberrails
  class Application < Rails::Application
    config.assets.enabled = false

    config.middleware.use Rack::Cors do
      allow do
        origins '*'
        resource '*', headers: :any, methods: [:get, :post, :put, :delete, :options]
      end
    end
  end
end

そして、これは私のコントローラーです:

class Api::TodosController < ApplicationController
  def index
    render json: Todo.all
  end

  def show
    render json: Todo.find(params[:id])
  end

  def create
    todo = Todo.new(todo_params)

    if todo.save
      render json: todo, status: :created
    else
      render json: todo.errors, status: :unprocessed
    end
  end

  private

  def todo_params
    params.require(:todo).permit(:title, :is_completed)
  end
end

そして、私のEmberアプリ内app/adapters/application.jsには次のものがあります:

import DS from 'ember-data';

export default DS.RESTAdapter.extend({
  host: 'http://localhost:3000/api'
});
4

1 に答える 1

0

Rails は、クロス サイト スクリプティングを防止するために、既定ではこれを許可していません。

ボード全体でこれを許可する場合は、これを ApplicationController に追加できます。

  after_filter :cors_set_access_control_headers

  def cors_set_access_control_headers
    headers['Access-Control-Allow-Origin']      = '*'
    headers['Access-Control-Allow-Methods']     = 'POST, GET, OPTIONS'
    headers['Access-Control-Max-Age']           = '1728000'
    headers['Access-Control-Allow-Credentials'] = 'true'
  end

Ember ガイドを使い始めるには問題ないように思えますが、本番アプリには適していません。

于 2014-07-21T21:15:36.067 に答える