Javascript Apigee-请求期间更改资源名称

Javascript Apigee-请求期间更改资源名称,javascript,request,apigee,Javascript,Request,Apigee,作为API代理的一部分,我想将名为search的目标资源映射到代理资源超级搜索。 因此,如果我的基本url是myproxy/v1.2,并且我创建了资源超级搜索,那么我希望url修改如下 myproxy/v1.2/super-search&apikey=123 到 myproxy/v1.2/search&apikey=123 从阅读文档和中可以看出,实现这一点的方法是通过执行以下操作,在目标端点的预流中使用JavaScript调用简单地修改URL context.targetRequest.url

作为API代理的一部分,我想将名为search的目标资源映射到代理资源超级搜索。 因此,如果我的基本url是myproxy/v1.2,并且我创建了资源超级搜索,那么我希望url修改如下

myproxy/v1.2/super-search&apikey=123

myproxy/v1.2/search&apikey=123

从阅读文档和中可以看出,实现这一点的方法是通过执行以下操作,在目标端点的预流中使用JavaScript调用简单地修改URL

context.targetRequest.url.replace('/super-search', '/search')
不幸的是,URL似乎没有包含资源名称,因此没有什么可替换的

或者我可以

context.setVariable('target.copy.pathsuffix', false);
context.targetRequest.url += '/search';
但这似乎删除了我所有的查询参数


如何仅更改目标上的资源名称而不影响请求的其他元素?

尝试使用Javascript调用在目标预流中重置目标URL-

context.setVariable("target.url",context.getVariable("target.url").replace('/super-search', '/search'));

好吧,我让它工作了,但这是一个讨厌的黑客。它绕过了Apigee必须确保正确写入目标URL的所有良好逻辑,而我只是自己用JavaScript编写

// Disable copying super-search into the output
context.setVariable('target.copy.pathsuffix', false);

//Build the target url manually: root + /search? + params list
var url = context.getVariable('target.url') + "/search?" + context.getVariable('request.querystring');

//Write the target URL back
context.setVariable('target.url', url);

应该有比这更好的方法-如果你知道它是什么,请张贴

谢谢@Sudhee,但这不起作用,因为target.url不包含资源名称。在本例中,target.url是
myproxy/v1.2
,因此替换不会执行任何操作