【问题标题】:How to connect my server with my ember cli App如何将我的服务器与我的 ember cli 应用程序连接起来
【发布时间】:2016-05-17 10:06:45
【问题描述】:

我的服务器在端口: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 服务器 ember 服务器 --proxy http://127.0.0.1:3000 在控制器上我使用 ajax 调用:

            $.ajax({
                    type: 'POST',
                    url: '/blog',
                    contentType: 'application/json',
                    data: param,
                    processData: false,
                    success :
              });

它得到一个错误: POST http://localhost:4200/blog500(内部服务器错误)

我已经完成了所有这些,但我不知道为什么它不起作用。 如果您对此有任何想法,请帮助我。

【问题讨论】:

  • 您检查过服务器错误日志吗? HTTP 状态代码表明它是服务器内部触发错误的东西。
  • @lock 谢谢兄弟。现在它工作正常
  • 是的,错误是没有服务器端不在客户端。
  • 但是我可以问一个问题吗?这是一个好方法吗(将ember与服务器连接)?
  • 是的,听起来不错!

标签: ember.js ember-cli


【解决方案1】:

您需要了解连接到 API 的两种方式之间的区别:

代理

您可以使用ember-cli--proxy 选项将所有发送到您的ember 开发服务器但未由ember 处理的请求代理到您的后端。

这是执行此操作的好方法,因为从您的应用程序和浏览器的角度来看,您的后端和您的应用程序位于同一主机上。

如果您这样做,您应该在您的适配器上指定 host 或将您的后端添加到您的 CSP 配置中。

但是,只有在生产环境中您从后端为您的 ember 应用程序提供服务时,您才能执行此操作。

CORS

连接到后端的另一种方法是将请求直接发送到另一个源。但是,这将是 CORS 请求,因此他们需要在您的后端进行额外配置!

如果您想直接从不同来源获取数据,则在浏览器登陆您的服务器时需要提供额外的HTTP 标头(CORS 标头)。

但是您应该这样做只有如果您不会在生产中从后端服务器交付前端。

如果您想使用CORS,您应该在运行ember serve 时指定--proxy 标志,而是指定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://localhost:4200/blog 的HTTP AJAX GET 调用应该返回与http://127.0.0.1:3000/blog 相同的结果。

要对此进行测试,我建议您使用 HTTP 开发客户端,例如 this one

我假设您在 http://127.0.0.1:3000/blog 上也获得了 HTTP 500。然后你的后端出了点问题。也许正确的 URI 是http://127.0.0.1:3000/blogs?这将是 embers 的默认设置。

如果您从您的 ember 应用程序直接调用 http://127.0.0.1:3000/blogs,但如果您不提供 CORS 标头,这将始终导致错误。

【讨论】:

  • 这对我很有帮助。
  • 但我不知道如何在同一端口上使用代理服务器。如果您有任何在同一端口上开发服务器的链接,请告诉我这对我很有帮助。
  • @niteshsingh 同一个端口到底是什么意思?你为什么要这样做?
  • 嗯,这就是代理的全部内容,对吧?你不必在同一个端口上运行它们。你从你的前端代理到你的后端,所以从你的前端它的行为就像它在同一个端口/源上一样,即使它不是,因为你不能在同一个源上运行两台服务器。稍后在生产环境中使用您的后端交付您构建的 ember 应用程序。
  • @niteshsingh 对于同一台主机,您无法使用同一端口启动服务。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-21
  • 2019-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多