【问题标题】:extraHeaders not being attached to petitionextraHeaders 未附加到请愿书
【发布时间】:2018-01-24 00:22:25
【问题描述】:

我正在尝试将 socket.io 与我的 Angular 集成。为此,我遵循了this 文章中概述的步骤。由于我的服务器(使用 Express)使用基于 jwt 的身份验证,因此我根据 socket.io docs 设置身份验证标头。这是 Angular 服务代码:

@Injectable()
export class PushNotificationsService {

  socket: SocketIoModel;
  observer: Observer<any>;
  environment;

  constructor (private authService: AuthService) {
    this.environment = environment; // This contains the server endpoints 
  }

  async getQuotes (): Promise<Observable<number>> {
    this.socket = socketIo(this.environment.url, {
      transportOptions: {
        transports: ['polling'],
        polling: {
          extraHeaders: {
            'Authorization': `Bearer ${await this.authService.getToken()}`
          }
        }
      }
    });

    this.socket.on('data', (res) => {
      this.observer.next(res.data);
    });

    return this.createObservable();
  }

  createObservable (): Observable<number> {
    return new Observable(observer => {
      this.observer = observer;
    });
  }

  private handleError (error) {
    console.error('server error:', error);
    if (error.error instanceof Error) {
      const errMessage = error.error.message;
      return Observable.throw(errMessage);
    }
    return Observable.throw(error || 'Socket.io server error');
  }    
}

如果我检查socket 属性,我可以看到正在设置该选项。但是,当我使用浏览器检查我的应用程序的请求时,我可以看到 Authentication 标头不存在:

关于我做错了什么有什么想法吗?

【问题讨论】:

    标签: node.js angular sockets typescript socket.io


    【解决方案1】:

    Transports 选项与 TransportOptions 处于同一级别。

    如果这有什么不同,您可以尝试,但我认为这不是您的问题,因为无论如何“轮询”是默认设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      相关资源
      最近更新 更多