Socket.io 监听事件的 FeathersJS 是无声的

FeathersJS with Socket.io listening to events is silent

我觉得我快要完成这项工作了,但我错过了最后一步。看起来我完全按照文档进行操作,但有人可以帮助我了解我所缺少的内容。这是我的@angular 服务:

declare var require: any

const feathers = require('feathers/client');
const socketio = require('feathers-socketio/client');
const io = require('socket.io-client');

import { Injectable } from '@angular/core';
import { UserService } from './user.service';

@Injectable()
export class FeathersService {

  socket = io.connect('http://localhost:3000/');
  app = feathers().configure(socketio(this.socket));
  status = this.app.service('realtime/user_status');

  constructor(
    public user: UserService,
  ) {
    this.status.on('updated', ({status}) => {
      console.log('your status was updated', status);
      this.user.me.status = status;
    });
  }

  updateStatus(status) {
    const id = this.user.me._id;
    this.status.update(id, {status});
  }
}

然后这是我的路由器代码(子路由:/realtime)

const feathers = require('feathers');
const realtime = feathers();

const socketio = require('feathers-socketio');
realtime.configure(socketio({ wsEngine: 'uws' }, (io) => {
  io.on('connection', (socket) => {
    socket.emit('news', { text: 'A client connected!' });
  });

  // Registering Socket.io middleware
  io.use((socket, next) => {
      // Exposing a request property to services and hooks
      socket.feathers.referrer = socket.request.referrer;
      next();
    });
}));

const UserService = require('../controllers/user_service');
realtime.use('/user_status', new UserService());

module.exports = realtime;

最后是我的服务

const User = require('../models/user');

class UserService {
  update(id, userProps, params, next) {
    const userID = id;

    User.findByIdAndUpdate({ _id: userID }, userProps, { 'new': true })
      .then(user => {
        console.log('userProps', userProps);
        console.log('user >>>', user);
        return Promise.resolve(user);
      })
      .catch(next);
  }
}

module.exports = UserService;

您没有在服务方法中返回 Promise

const User = require('../models/user');

class UserService {
  update(id, userProps, params) {
    const userID = id;

    return User.findByIdAndUpdate({ _id: userID }, userProps, { 'new': true })
      .then(user => {
        console.log('userProps', userProps);
        console.log('user >>>', user);
        return user;
      });
  }
}

module.exports = UserService;

应该做。