Ember.js - ENV.host设置被忽略 - 我该如何诊断?

时间:2016-06-03 01:15:43

标签: ember.js

我有两个非常相似且简单的应用程序。

我将他们两个作为' 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'
});

1 个答案:

答案 0 :(得分:0)

你的代码对我来说是正确的,而且我自己也在努力解决这个问题。我唯一的建议是使用代理选项:

ember s --proxy http://localhost:8000

这将代理通过该域的所有请求,并希望您可以继续开发。