更改数据时,为什么客户端不从已订阅Sails.js模型的套接字接收更新?

问题描述

在过去的几个小时中,我一直在尝试找出如何通过连接到Sails.js套接字的React Native客户端获取实时更新。

我没有看到我知道的任何错误消息。

在下面的代码块中,我将来自React Native功能组件discover.js的请求发送到用户/登录路径下的Sails服务器,在此我订阅了User模型。然后,我使用io.socket.on('user',...)监听客户端中的通知。但是,当我更改一个名为“ Irene”的用户的值时,这是通过find()ORM方法获得的结果,io.socket.on('user',...)事件不会在客户。

discover.js (React本机功能组件)

import * as React from 'react';
import { useContext,useState,useEffect } from 'react'
import { Text,View,StyleSheet,Animated,Button,TouchableOpacity,Dimensions } from 'react-native';
import { NavigationContainer } from '@react-navigation/native';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import firebase from './../../firebase.js';
import  AuthContext  from './../imports/AuthContext.js'

var socketIOClient = require('socket.io-client');
var sailsIOClient = require('sails.io.js');

export default function discoverScreen() {

    const {user} = useContext(AuthContext)

var io = sailsIOClient(socketIOClient);

// Set some options:
// (you have to specify the host and port of the Sails backend when using this library from Node.js)
io.sails.url = 'http://localhost:1337';

io.socket.on('connect',function onConnect(){


    io.socket.post('/user/login',{uid: user.uid},function serverResponded (body,JWR) {
      // body === JWR.body
      console.log('Sails responded with: ',body);
      console.log('with headers: ',JWR.headers);
      console.log('and with status code: ',JWR.statusCode);

      if (JWR.error) {
        console.error('Could not subscribe to notifications for users named Irene: '+JWR.error);
        return;
      }
    });

    io.socket.on('user',function (msg) {
        console.log("SOCKET CLIENT NOTIFICATION")
        console.log(msg)
    });
});

login.js (Sails.js控制器文件-/api/controllers/user/login.js

module.exports = async function login(req,res) {

    if (!req.isSocket) {
      return res.badRequest();
    }

      
    try {
        var record = await User.find({
            firstName: "Irene"
        })

    } catch (err) {
        sails.log.debug(err)
    }

  User.subscribe(req.socket,_.pluck(record,'id'));

  return res.ok(record);

};

User.js (Sails.js模型文件-/api/models/User.js)

module.exports = {
  primaryKey: 'id',attributes: {
    uid: {
      type: 'string'
    },birthday: {
      type: 'string',columnType: 'date'
    },city: {
      type: 'string'
    },college: {
      type: 'string'
    },employer: {
      type: 'string'
    },firstName: {
      type: 'string'
    },fullName: {
      type: 'string'
    },gender: {
      type: 'string'
    },heightFeet: {
      type: 'number'
    },heightInches: {
      type: 'number'
    },job: {
      type: 'string'
    },lastName: {
      type: 'string'
    },religion: {
      type: 'string',isIn: [
        'Buddhist','Christian','Catholic','Spiritual but not religIoUs','Neither religIoUs nor spiritual','Other'
      ]
    },preferences: {
      model:'preference',columnName: 'preference_id'
    }
  },tableName: 'users'
}

我尝试了很多不同的事情。 我所知道的在起作用/可能不是问题的根源:

  1. 期望的行由find()方法选择。有三个用户的名字叫Irene,findOne正在获得这些用户
  2. _。pick方法正确返回了这些用户的主键[1、5、30]。
  3. 用户表的主键为id,在模型文件User.js中对此进行了指示。
  4. 即使在建立套接字连接之前也可以调用io.socket.on('user',...),因为文档说连接之前附加的事件被放入队列中,并在连接发生时运行。因此,我不认为缺少连接不是这里的问题。
  5. 名为Irene的三个用户将在回调函数serverResponded的参数“ body”中返回。
  6. 我尝试将User.subscribe的第一个参数设置为req.socket(如上面的代码所示)和req都没有,

非常感谢您的帮助。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)