Сокет IO в гнезде JS не получает подтверждения - PullRequest
0 голосов
/ 16 октября 2018

У меня небольшая проблема с функцией подтверждения в сокете io с использованием nestjs framework.

Обычно, с кодом ниже, параметр data в функции onStartSearch должен содержать данные и *Функция 1006 * для уведомления внешнего интерфейса.Но параметры данных содержат только данные, отправленные с внешнего интерфейса.

Бэкэнд

@SubscribeMessage('startSearch')
  async onStartSearch(socket, data) {


    logger.info('User ' + socket.id + ' startedSearch');
    logger.debug(data);

    if (Joi.validate(data, requestSchema).error) {
      return ack({
        status: 'error',
        reason: 'invalid params format',
      });
    }

Фронтенд

  public sendMessage(payload: IChatMessage) {
        this.socket.emit('message', payload, function(test) {
            console.log("acckk received")
        });
    }

1 Ответ

0 голосов
/ 18 октября 2018

Если вы просто возвращаете простые данные, функция подтверждения (обратного вызова) будет автоматически вызываться гнездом:

@SubscribeMessage('startSearch')
async onStartSearch(socket, data) {
  if (Joi.validate(data, requestSchema).error) {
      return {
        status: 'error',
        reason: 'invalid params format',
      };
    }
}

Но вы также можете работать без функции обратного вызова (например, при работе с nativeсокеты, которые не поддерживают функцию обратного вызова):

Методы @SubsribeMessage также могут возвращать Observable<WsResponse<any>>.WsResponse содержит имя события и полезную нагрузку {event: string, data: any}.

@SubscribeMessage('startSearch')
async onStartSearch(socket, data): Observable<WsResponse<any>> {
  if (Joi.validate(data, requestSchema).error)
    return of({event: 'searchResponse', data});
  }

Затем просто прослушайте ответ на вашем клиенте:

socket.on('searchResponse', function (data) {
  console.log('event', data);
});
...