gpt4 book ai didi

ember.js - 如何为 Ember.js + Express 设置开发环境

转载 作者:行者123 更新时间:2023-12-04 00:28:36 25 4
gpt4 key购买 nike

我正在将 Ember.js 应用及其对应的 Express REST API 分成两个不同的项目。我以为这样事情会更干净。

在那之前,我的 Express 应用程序同时服务于 REST 端点和所有静态文件,如 index.htmlapp.js。但现在,ember-cli 负责提供静态文件,Express 应用程序处理身份验证 + REST。

我遇到的最后一个问题是我现在有两个不同的端口:ember-cli 使用 http://localhost:4200 并且 express 使用 http://localhost:3333 。当我在身份验证时从 Express 获取 session cookie 时,由于同源策略,它永远不会在后续请求中发送(请参阅:How do I send an AJAX request on a different port with jQuery?)。

现在,如果我理解正确,我有两个解决方案:

  1. 设置 Express 以支持 JSONP 并确保 Ember 也使用它
  2. 安装本地 Nginx 或 Apache 并设置代理 channel

第一个解决方案不可行,因为部署后两个应用程序将使用相同的域/端口。第二种解决方案可能会奏效,但要求开发人员安装本地 Web 服务器来简单地运行应用程序似乎有点荒谬。

我相信你们中的许多人以前都遇到过这个问题。您有什么建议可以简化开发?

谢谢!

最佳答案

嗯。好像我找到了另一个解决方案:

在此处找到以下说明:http://discuss.emberjs.com/t/ember-data-and-cors/3690/2

export default DS.RESTAdapter.extend({
host: 'http://localhost:3333',
namespace: 'api',
ajax: function(url, method, hash) {
hash = hash || {}; // hash may be undefined
hash.crossDomain = true;
hash.xhrFields = { withCredentials: true };
return this._super(url, method, hash);
})
});

您还需要在 Express 应用中添加以下 header :

// Add support for cross-origin resource sharing (localhost only)
app.all('*', function(req, res, next) {
if (app.get('env') === 'development') {
res.header('Access-Control-Allow-Origin', 'http://localhost:4200');
res.header('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type');
res.header('Access-Control-Allow-Credentials', 'true');
res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');
}
next();
});

就是这样!最后一步是确保 Ember 使用 CORS仅在开发环境中。

更新

Ember-cli 现在有一个集成的 proxy feature这使得上述所有内容都已过时。

来自文档:“使用 --proxy 标志将所有 ajax 请求代理到给定地址。例如 ember server --proxy http://127.0.0.1:8080 将代理您的所有应用XHR 到您在端口 8080 上运行的服务器。”

关于ember.js - 如何为 Ember.js + Express 设置开发环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24727263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com