要实现Yelp API,需要签名。因此,应该在传递将要使用的URL的所有参数时生成此签名。
长话短说,因为我在jsonp的帮助下查询API,所以技巧是首先生成下一个JSONP回调ID,将其包含在签名生成中(参考:how to custom set angularjs jsonp callback name?)
在Angular 1中,类似于:
// Prepare parameters
var callbackId = (<any> angular).callbacks.counter.toString(36);
// Update my params with: callback='angular.callbacks._' + callbackId
// Query my backend to generate a signature
// Query Yelp API
现在我正在迁移到angular2,我也要移植那个伏都教魔法。任何人都知道我怎么能查询下一个jsonp回调ID,它将分别使用如何替换
(<any> angular).callbacks.counter
在angular2?
我看到BrowserJsonp包含nextRequestID(),但我没有找到一种方法来访问它(如果我没错,那就是私人工厂)。
P.S。:为了记录,我找到了
angular.callbacks._ID
应该用我的angular2替换为
__ng_jsonp__.__reqID.finished
答案 0 :(得分:0)
在这个问题上挖掘一点,我没有找到任何其他解决方案,而不是编写我自己的@Injectable服务,在那里我执行我的app的所有jsonp查询并递增我自己的计数器来计算jsonp回调(类变量,只有一个实例允许我有那个计数器。)
的伪代码:
@Injectable()
export class JsonpService {
private counter:number=0;
private query1() {
this.jsonp.get(url, options).then(() => {
counter++;
}, () => {
counter++;
});
}
private getActualJsonpCallbackCounter() {
return counter;
}
}
但是,我发现这个解决方案非常难看,因此我将我的应用程序从使用V2迁移到Yelp的V3 API。 Yelp API V3实现了OAuth2(以及更多OAuth1),它不会要求加密所有URL,也不需要那些丑陋的技巧。
注意:从V2迁移到V3时,我不得不使用&#34; jsonp&#34;请求&#34;得到&#34;请求(必须在请求的标头中添加OAuth2授权)。因此,我遇到了一些CORS问题,在后面的帖子中解决并记录了