Как подключить мой сервер к моему приложению 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 заголовки.

Другие вопросы по тегам