正确的Angularjs使用JSON的方式维护RESTful网址

时间:2016-03-16 14:23:52

标签: javascript angularjs json rest

我正在构建一个Angularjs Web应用程序书籍我想你可以说。我跟随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的{​​{1}}将var config = require('config.json')('./config.json');文件注入到config.json npm模块中,./config.json第二个User指的是我的本地配置JSON文件。这似乎是一个很好的解决方案,但由于我无法让它工作,所以让我第二次猜测是否有更简单或更合适的方法来做到这一点。

1 个答案:

答案 0 :(得分:2)

嗯,这就是我如何使我的端点组织起来的。将常量添加到应用程序的主模块。

(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);
        ...