我有两个非常相似且简单的应用程序。
我将他们两个作为' ember s'没有其他论据。
他们都依赖于在http://localhost:8000找到的后端。
其中一个完美无缺,另一个确信它应该对http://localhost:4200进行API调用。
因此,例如,在工作列表屏幕上呈现列表屏幕需要GET到http://localhost:8000/api/todos。在非工作列表屏幕上呈现列表屏幕会导致向http://localhost:4200/api/projects发出GET请求。
后端的位置通过config/application.js
属性在ENV.host
中定义。
如何进一步诊断此问题,以了解为什么非工作应用会忽略ENV.host
?
欢迎任何想法。
工作和非工作应用程序都在Ember 2.4.2上运行
我会在下面提供相关配置以防万一。
问题config/application.js
如下所示:
module.exports = function(environment) {
var ENV = {
host: 'https://example.com',
modulePrefix: 'spuv-ember',
environment: environment,
baseURL: '/',
locationType: 'auto',
EmberENV: {
FEATURES: {
// Here you can enable experimental features on an ember canary build
// e.g. 'with-controller': true
}
},
APP: {
// Here you can pass flags/options to your application instance
// when it is created
}
};
if (environment === 'development') {
// ENV.APP.LOG_RESOLVER = true;
// ENV.APP.LOG_ACTIVE_GENERATION = true;
// ENV.APP.LOG_TRANSITIONS = true;
// ENV.APP.LOG_TRANSITIONS_INTERNAL = true;
// ENV.APP.LOG_VIEW_LOOKUPS = true;
ENV.host = 'http://localhost:8000';
}
if (environment === 'test') {
// Testem prefers this...
ENV.baseURL = '/';
ENV.locationType = 'none';
// keep test console output quieter
ENV.APP.LOG_ACTIVE_GENERATION = false;
ENV.APP.LOG_VIEW_LOOKUPS = false;
ENV.APP.rootElement = '#ember-testing';
}
if (environment === 'production') {
}
return ENV;
};
工作config\application.js
如下所示:
module.exports = function(environment) {
var ENV = {
host: 'https://example.com',
modulePrefix: 'todo-ember',
environment: environment,
baseURL: '/',
locationType: 'auto',
EmberENV: {
FEATURES: {
// Here you can enable experimental features on an ember canary build
// e.g. 'with-controller': true
}
},
APP: {
// Here you can pass flags/options to your application instance
// when it is created
}
};
ENV['ember-simple-auth'] = {
authenticationRoute: 'login',
routeAfterAuthentication: 'todos',
routeIfAlreadyAuthenticated: 'todos'
};
if (environment === 'development') {
ENV.host = 'http://localhost:8000';
// ENV.APP.LOG_RESOLVER = true;
// ENV.APP.LOG_ACTIVE_GENERATION = true;
// ENV.APP.LOG_TRANSITIONS = true;
// ENV.APP.LOG_TRANSITIONS_INTERNAL = true;
// ENV.APP.LOG_VIEW_LOOKUPS = true;
}
if (environment === 'test') {
// Testem prefers this...
ENV.baseURL = '/';
ENV.locationType = 'none';
// keep test console output quieter
ENV.APP.LOG_ACTIVE_GENERATION = false;
ENV.APP.LOG_VIEW_LOOKUPS = false;
ENV.APP.rootElement = '#ember-testing';
}
if (environment === 'production') {
}
return ENV;
};
app/adapters/application.js
的非工作版本显示正在使用的ENV.host
值:
import DS from 'ember-data';
import ENV from 'spuv-ember/config/environment';
export default DS.JSONAPIAdapter.extend({
host: ENV.host,
namespace: 'api'
});
app/adapters/application.js
的工作版本显示正在使用的ENV.host
值(由于此应用也使用了一种身份验证形式,因此略有不同):
import DS from 'ember-data';
import ENV from 'todo-ember/config/environment';
import DataAdapterMixin from 'ember-simple-auth/mixins/data-adapter-mixin';
export default DS.JSONAPIAdapter.extend(DataAdapterMixin, {
host: ENV.host,
namespace: 'api',
authorizer: 'authorizer:drf-token-authorizer'
});
答案 0 :(得分:0)
你的代码对我来说是正确的,而且我自己也在努力解决这个问题。我唯一的建议是使用代理选项:
ember s --proxy http://localhost:8000
这将代理通过该域的所有请求,并希望您可以继续开发。