Skip to content
Advertisement

JavaScript: Duplicate data property in object literal not allowed in strict mode

problem Description

I am dealing with an optional variable called ByteRange. For this purpose I added 2 different URLs in $resource.

When I did that I got the following error:

Message:
    Error in parsing: "tools/test/retrieve/retrieve.service.js", Line 24: Duplicate data property in object literal not allowed in strict mode
Details:
    domain: [object Object]
    domainThrown: true

I understood that I can’t have 2 gets. Is there another way to deal with optional variables in Javascript?


source code

(function () {
    'use strict';

    angular
        .module('MyApp')
        .factory('retrieve', retrieveObject);

    retrieveObject.$inject = ['$resource'];


    function retrieveObject($resource) {
        this.resource = $resource('api/tools/test', {}, {
            'list': {
                method: 'GET',
                url: 'api/tools/test/list/:chain/:path/:dataCenter'
            },
            'get': {
                method: 'GET',
                url: 'api/tools/test/get/:chain/:dataCenter/:path/:byteRange'
            },
            'get': {
                method: 'GET',
                url: 'api/tools/test/get/:chain/:dataCenter/:path'
            },
        });

        return this;
    }

})();

Advertisement

Answer

Okay this is not perfect but it must help you, probably use regex instead of replace is a better idea.

function resolveUrl(url, params) {
    let resolvedUrl = url;

    for(let i in params) {
        resolvedUrl = resolvedUrl.replace(i, params[i]);
    }

    return resolvedUrl;
}

let params = {
    ':chain': 'aaa',
    ':dataCenter': 'bbb',
    ':path': 'ccc',
    ':byteRange': '',
};

let result = resolveUrl('api/tools/test/get/:chain/:dataCenter/:path/:byteRange', params);
console.log(result);
// Output : "api/tools/test/get/aaa/bbb/ccc/"

params = {
    ':chain': 'aaa',
    ':dataCenter': 'bbb',
    ':path': 'ccc',
    ':byteRange': 'yyy',
};

result = resolveUrl('api/tools/test/get/:chain/:dataCenter/:path/:byteRange', params);
console.log(result);
// Output : "api/tools/test/get/aaa/bbb/ccc/yyy"
User contributions licensed under: CC BY-SA
7 People found this is helpful
Advertisement