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"