我正在通过我想你可以说的书建立一个Angularjs网络应用程序。我跟随John Papa Angular Styleguide,到目前为止事情进展顺利。我现在需要将所有RESTful主机URL保存在某种JSON格式的配置文件中。这些主机端点会根据客户端或AWS机器的更改而频繁更改,因此将所有URL保留在一个位置可能有利于更改。
目前在我的应用程序中处理REST调用的javascript文件中,设置如下:
function ModelViewService($http, $q, exception, logger) {
var HOST = 'http://xxxxxxxxxxxxxxxxxx.amazonaws.com';
var MODULE = '/modelview/service/rest';
...
然后当调用获取某些数据时,它看起来像这样:
function getGroups() {
return $http.get(HOST + MODULE + '/group/retrieveAll')
.then(success)
.catch(fail);
...
然后我有其他文件具有不同的服务和不同的主机,所以我基本上想把JSON对象放在一个看起来像这样的地方:
{
'modelviewservice': {
'HOST': 'http://xxxxxxxxxxxxxxxxxx.amazonaws.com',
'MODULE': '/modelview/service/rest'
},
... //other service
}
然后回到javascript文件中执行类似$http.get(config.modelviewservice.host + config.modelviewservice.MODULE + '/group/retrieveAll')
的操作。
我不知道实现这一目标的最佳方法,并遵循角度风格指南。我找到了一个名为requre.js
的东西,显然会通过类似config.json
的东西将var config = require('config.json')('./config.json');
文件注入javascript,其中第一个config.json
引用config.json npm模块,第二个./config.json
引用我的本地配置JSON文件。这似乎是一个很好的解决方案,但由于我无法让它工作,它让我第二次猜测是否有更简单或更正确的方法来做到这一点。
好吧,这就是我如何使我的端点组织起来的。将常量添加到应用程序的主模块。
(function() {
'use strict';
angular
.module('apiConstant', [])
.constant('apiConstant', constant());
function constant() {
return {
HOST: 'http://xxxxxxxxxxxxxxxxxx.amazonaws.com',
modules: {
MODULE_1: '/modelview/service/rest',
MODULE_2: '/modelview/factory/rest',
MODULE_3: '/modelview/sample/rest'
},
endpoints: {
GET_GROUPS: '/group/retrieveAll',
GET_USERS: '/users/retrieveAll',
POST_GROUP: '/group/add'
}
};
}
})();
然后在你的服务中
function ModelViewService($http, $q, exception, logger, apiConstant) {
var HOST = apiConstant.HOST;
var MODULE = apiConstant.modules.MODULE_1;
...
function getGroups() {
return $http.get(HOST + MODULE + apiConstant.endpoints.GET_GROUPS)
.then(success)
.catch(fail);
...