extraHeaders没有依附于请愿

时间:2018-01-24 00:22:25

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

我试图将socket.io与我的角度集成。为此,我已按照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标头不存在: enter image description here

关于我做错的任何想法?

1 个答案:

答案 0 :(得分:0)

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

您可以尝试这样做是否有所作为,但我不认为这是您的问题,尽管“轮询”仍然是默认设置。