我试图将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
标头不存在:
关于我做错的任何想法?
答案 0 :(得分:0)
Transports选项与TransportOptions处于同一级别。
您可以尝试这样做是否有所作为,但我不认为这是您的问题,尽管“轮询”仍然是默认设置。