其他分享
首页 > 其他分享> > 如何为Ember.js Express设置开发环境

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

作者:互联网

我正在将Ember.js应用程序及其Express REST API分成两个不同的项目.我认为事情会更加清洁.

在那之前,我的Express应用程序都提供REST端点和所有静态文件,如index.html和app.js.但现在,ember-cli负责提供静态文件,Express应用程序处理身份验证REST.

我遇到的最后一个问题是我现在有两个不同的端口:ember-cli使用http:// localhost:4200,express使用http:// localhost:3333.当我在认证时从Express获得会话cookie时,由于相同的原始策略,它永远不会在后续请求中发送(参见:How do I send an AJAX request on a different port with jQuery?).

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

> Setup Express支持JSONP并确保Ember也使用它
>安装本地Nginx或Apache并设置代理传递

第一个解决方案不行,因为部署后两个应用程序将使用相同的域/端口.第二种解决方案可能会起作用,但要求开发人员安装本地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应用程序中添加以下标题:

// 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.

UPDATE

Ember-cli现在有一个集成的proxy feature,使上述所有内容都过时了.

从文档:“使用–proxy标志代理所有给定地址的ajax请求.例如,ember服务器–proxy http://127.0.0.1:8080将代理您的所有应用程序XHR到运行在端口8080的服务器.”

标签:nginx,express,ember-js,ember-cli
来源: https://codeday.me/bug/20190830/1769676.html