代码之家  ›  专栏  ›  技术社区  ›  Dimoreno

角度获取数据(http-messagebird)

  •  0
  • Dimoreno  · 技术社区  · 1 年前

    我正试图从我的messagebird api中获取对话,我在poster中尝试过,一切都很好,但当我试图从我有角度的项目中获取对话时,这给了我一个错误,这是我的代码:

    export class AppComponent {
      constructor(private service: WaServiceService) { }
    
      fetchCharacters() {
        this.service.getConversations().subscribe(
          (data) => {
            console.log(data); 
          },
          (error) => {
            console.error(error);
          }
        );
      }
    }
    

    我的服务:

    import { Injectable } from '@angular/core';
    import { HttpClient, HttpHeaders } from '@angular/common/http';
    import { Observable } from 'rxjs';
    
    @Injectable({
      providedIn: 'root'
    })
    
    export class WaServiceService {
      private apiUrl = 'https://conversations.messagebird.com/v1/conversations?status=all&offset=0&limit=20';
      private apiKey = 'AccessKey abc123';
    
      constructor(private http: HttpClient) { }
    
      getConversations(): Observable<any> {
        const url = `${this.apiUrl}`;
        const headers = new HttpHeaders().set('Authorization', `${this.apiKey}`);
    
        return this.http.get(url, { headers });
      }
    }
    

    我做错了什么?

    postman image

    0 回复  |  直到 1 年前
        1
  •  0
  •   traynor    1 年前

    显然,这是一个CORS问题,不允许来自不同来源的访问(这就是为什么它与Postman合作,而不是与Angular合作,请参阅: XMLHttpRequest cannot load XXX No 'Access-Control-Allow-Origin' header ). 另外,所有Angular代码都是公共的,所以您不应该在前端包含您的API密钥。

    您需要从服务器发出messagebird请求(这取决于您的服务器,请检查 SDK examples ,而不是从前端。

    所以,从Angular,您向服务器发出请求,发送一些参数和数据来发出请求,然后服务器使用这些数据和参数,然后向messagebird发出请求,并将数据返回给Angular服务。

    角度服务:

    this.http.get('YOUR SERVER URL', someDataForRequest);
    

    您的服务器( Node.js example 受启发的伪代码):

    const apiKey = 'AccessKey abc123';
    
    const messagebird = require('messagebird').initClient('apiKey');
    
    makeRequest(someDataForRequest) {
    
        // list conversations
        // In this case 20 is limit and 0 is offset
        messagebird.conversations.list(20, 0, function(err, response) {
            if (err) {
                return console.log(err);
            }
            console.log(response);
            
            // return data to frontend
            return response;
    
        });
    
    }