【发布时间】: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