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

问题描述 投票:2回答:1

我正在通过我想你可以说的书建立一个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文件。这似乎是一个很好的解决方案,但由于我无法让它工作,它让我第二次猜测是否有更简单或更正确的方法来做到这一点。

javascript angularjs json rest
1个回答
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);
        ...
© www.soinside.com 2019 - 2024. All rights reserved.