首页 文章

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

提问于
浏览
2

我的服务器正在使用端口:3000并且我正在使用节点,在服务器端表达,这在使用curl或REST客户端时工作正常 .

ember cli server正在使用port: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调用:

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

它收到一个错误: POST http://localhost:4200/blog 500 (Internal Server Error)

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

1 回答

  • 5

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

    Proxy

    您可以使用 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 相同的内容 .

    为了测试这个,我建议你使用像this one这样的HTTP开发客户端 .

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

    如果您直接从您的ember应用程序中调用 http://127.0.0.1:3000/blogs ,则如果您不传递 CORS Headers ,则会始终导致错误 .

相关问题