#node.js #typescript
Вопрос:
Привет всем, я пытаюсь создать приложение для чата с помощью getstream.io. У меня есть класс chatservice, и я пытаюсь создать его новый экземпляр для вызова функции getAllmessages, чтобы я мог получать все сообщения с определенного канала. Однако я получаю сообщение об ошибке, в котором говорится, что свойство «chatServices» не имеет инициализатора и определенно не назначено в конструкторе. Может кто-нибудь, пожалуйста, объяснить, что я делаю не так?
chat.service.ts
import { StreamChat } from 'stream-chat';
import convict from 'convict';
import convictValidator from 'convict-format-with-validator';
import dotenv from 'dotenv';
import { Environment } from './types';
export class ChatService {
public static masterHealthBotUserId = 'masterHealthBot';
public static client = StreamChat.getInstance(
appConfig.get('getstream').apiKey,
appConfig.get('getstream').apiSecret,
);
/**
* Creates get stream chat token that can be used by the client to connect to getStream
* @param userId - User Id
* @param expiry - expiration time of token. If undefined then token wont expire
*/
public createToken({ userId, expiry }: { userId: number; expiry?: number }) {
return ChatService.client.createToken(userId.toString(), expiry);
}
public createGetStreamUser({
userId,
displayName,
}: {
userId: number;
displayName: string;
}) {
return ChatService.client.upsertUser({
id: userId.toString(),
name: displayName,
});
}
public createPodChat({
userId,
podName,
}: {
userId: number;
podName: string;
}) {
const channel = ChatService.client.channel('messaging', podName, {
name: podName,
created_by_id: userId.toString(),
members: [ChatService.masterHealthBotUserId, userId.toString()],
});
return channel.create();
}
public sendAdminMessage({
title,
text,
podId,
}: {
title: string;
text: string;
podId: number;
}) {
// Title outside attachments needed for push notifications
// Title inside attachments used for banners within Pods
return this.getPod(podId.toString()).sendMessage({
user_id: ChatService.masterHealthBotUserId,
text,
title,
attachments: [
{
title,
},
],
});
}
public addUsersToPod(userIds: number[], podId: number) {
return this.getPod(podId.toString()).addMembers(
userIds.map((id) => id.toString()),
);
}
public removeUsersFromPod(userIds: number[], podId: number) {
return this.getPod(podId.toString()).removeMembers(
userIds.map((id) => id.toString()),
);
}
// Queries for all of users Pods on GetStream
public queryUsersPods(userId: number) {
return ChatService.client.queryChannels({
type: 'messaging',
members: { $in: [userId.toString()] },
});
}
private getPod(podId: string) {
return ChatService.client.channel('messaging', podId);
}
}
getallmessage.ts
import { raw } from 'objection';
import { ChatService } from '@/components/chat/chat.service';
export class GetMessages {
private chatService: ChatService;
constructor() {
this.chatService = new ChatService();
}
public async getallmessages(podId: string) {
const channel = ChatService.client.channel('messaging', podId);
const messageFilter = { id: { $exists: true } };
const response = await channel.search(messageFilter);
console.log(response.results);
}
const chatServices = new GetMessages();
chatServices.getallmessages('3');
}