Как подключить мой сервер к моему приложению ember cli
Мой сервер работает на порте:3000, и я использую узел, экспресс на стороне сервера, и это работает нормально при использовании клиента curl или REST.
Ember Cli сервер работает на порт:4200
Я добавил этот код в environment.js для подключения сервера к клиенту.
contentSecurityPolicy: {
'default-src': "'none'",
'script-src': "'self' 'unsafe-inline' 'unsafe-eval'",
'font-src': "'self'",
'connect-src': "'self' http://localhost:3000",
'img-src': "'self'",
'report-uri':"'localhost'",
'style-src': "'self' 'unsafe-inline'",
'frame-src': "'none'"
}
и мой код адаптера приложения:
import JSONAPIAdapter from 'ember-data/adapters/json-api';
export default JSONAPIAdapter.extend({
"host": "http://localhost:3000",
"namespace": "api"
});
на этом сервере я запускаю свой ember server - proxy http://127.0.0.1:3000/ на контроллере я использую ajax call:
$.ajax({
type: 'POST',
url: '/blog',
contentType: 'application/json',
data: param,
processData: false,
success :
});
появляется сообщение об ошибке: POST http://localhost:4200/blog 500 (внутренняя ошибка сервера)
Я сделал все это, но я не знаю, почему это не работает. Пожалуйста, помогите мне, если у вас есть идеи для этого.
1 ответ
Вам необходимо понять разницу между двумя способами подключения к вашему API:
полномочие
Вы можете использовать --proxy
вариант ember-cli
чтобы проксировать все запросы, сделанные на ваш сервер разработки ember, которые не обрабатываются ember к вашему бэкэнду.
Это хороший способ сделать это, потому что с точки зрения вашего приложения и браузера ваш бэкэнд и ваше приложение находятся на одном хосте.
Если вы делаете это, вы не должны указывать host
на вашем адаптере или добавьте свой бэкэнд в конфигурацию CSP.
Однако вы можете сделать это только в том случае, если на производстве вы обслуживаете свое приложение ember из своего бэкэнда.
CORS
Другой способ подключения к вашему бэкэнду - отправлять запросы напрямую к другому источнику. Однако это будет CORS
запросы, поэтому они нуждаются в дополнительной настройке на вашем бэкэнде!
Если вы хотите напрямую получать данные из другого источника, в браузерной стране ваш сервер должен предоставить дополнительные HTTP
заголовки (CORS
Заголовки).
Однако делать это следует только в том случае, если вы не будете доставлять свой интерфейс с вашего внутреннего сервера в производство.
Если вы хотите использовать CORS
Вы не должны указывать --proxy
флаг, когда вы бежите ember serve
, но укажите host
и правильно настройте свой CSP.
Я также упомянул, что вы пропустили =
в вашем ember serve
вызов.
Это не ember server --proxy http://127.0.0.1:3000
но ember server --proxy=http://127.0.0.1:3000
!
Вообще, если вы делаете ember serve --proxy=http://127.0.0.1:3000
затем HTTP AJAX GET вызов http://localhost:4200/blog
должен вернуть так же, как http://127.0.0.1:3000/blog
,
Чтобы проверить это, я рекомендую вам использовать клиент разработки HTTP, как этот.
Я полагаю, вы получите HTTP 500 на http://127.0.0.1:3000/blog
, Тогда что-то не так на вашем бэкэнде. Может быть, правильный URI http://127.0.0.1:3000/blogs
? это будет уголь по умолчанию.
Если вы звоните напрямую http://127.0.0.1:3000/blogs
однако из вашего приложения ember это всегда приведет к ошибке, если вы не доставите CORS
заголовки.