如何使用我的ember cli App连接我的服务器

时间:2016-05-17 10:06:45

标签: ember.js ember-cli

我的服务器正在使用端口:3000并且我在服务器端使用node,express,这在使用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/blog 500(内部服务器错误)

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

1 个答案:

答案 0 :(得分:5)

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

<强>代理

您可以使用--proxy的{​​{1}}选项将所有未经ember处理的请求发送给您的后端。

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

如果您这样做,则指定适配器上的ember-cli或将后端添加到CSP配置中。

但是,只有在制作中,您才可以从后端为您的余烬应用程序提供服务。

<强> host

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

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

但是,如果您不在生产中从后端服务器提供前端,则应该执行此操作。

如果您要使用CORS,则在运行CORS指定--proxy标志,但指定ember serve并配置你的CSP正确。

我还提到您在host电话中错过了=

它不是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相同的内容。

为了测试这一点,我建议您使用像this one这样的HTTP开发客户端。

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

如果您直接从您的ember应用程序拨打http://127.0.0.1:3000/blogs,如果您不提供http://127.0.0.1:3000/blogs标题,则会始终导致错误。