我几乎用手指搜索了我的手指。似乎很多关于连接socket.io与React Native的现有信息已经过时,或者我只是在解释错误的东西?
我设法让客户端连接(当我连接到我的应用程序时,我正在获取客户端控制台日志)。似乎是服务器端给了我一些问题。为什么从客户端发出的数据不会显示为终端中的日志?我的server.js中没有相关的console.logs正在记录,但App.js console.logs正在注册。
修改:这是我完整的App.js文件:
import Expo from 'expo';
import React from 'react';
import { Dimensions, StyleSheet, Text, View } from 'react-native';
import store from './src/store';
import { Provider } from 'react-redux';
// window.navigator.useragent = 'react-native'; -> not necessary anymore?
const ROOT_URL = 'https://myherokudomain.herokuapp.com';
const io = require('socket.io-client/dist/socket.io');
const socket = io.connect(ROOT_URL);
socket.on('connect', () => {
console.log('Connected to server');
});
socket.on('example', (data) => {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
socket.on('disconnect', () => {
console.log('Disconnected from server');
});
export default class App extends React.Component {
render() {
// const MainNavigator = my react-navigation system
return (
<Provider store={store}>
<View style={styles.container}>
<MainNavigator />
</View>
</Provider>
);
}
}
修改:这是我的完整server.js文件:
const config = require('./config/config');
const { mongoose } = require('./db/mongoose');
const express = require('express');
const cors = require('cors');
const app = express();
const port = process.env.PORT;
// ************ Include and use separate routes file
app.use(require('./routes/routes'));
// ************
//Cross-Origin resource sharing. cors library solves CORS problems.
app.use(cors());
//***********
/* Chat server code*/
// enabled heroku session affinity:
// see https://devcenter.heroku.com/articles/session-affinity
// to enable: heroku features:enable http-session-affinity
// to diable: heroku features:disable http-session-affinity
const socketIO = require('socket.io');
const http = require('http');
const server = http.createServer(app);
const io = socketIO(server, { origin: "*:*" });
//********** */
io.on('connection', (socket) => {
console.log('A client just joined', socket.id);
socket.emit('example', { hello: 'world' });
socket.on('my other event', (data) => {
console.log(data);
});
socket.on('disconnect', () => {
console.log('User was disconnected');
});
});
server.listen(port, (err) => {
console.log(`started on port ${port}`);
});
module.exports = { app };
我在客户端获得控制台日志就好了(例如,当我在expo上打开我的应用程序时,“连接到服务器”和“hello:world”的东西出现了。但我没有得到服务器控制台日志。
我做错了什么 - 如何让socket.io完全使用已部署的React-Native应用程序?
我真的很感激任何帮助!我一直坚持这个。
答案 0 :(得分:0)
您没有获得服务器端控制台日志,因为1.)他们只是登录服务器,而且2.)如果您确实想要,那么您不会发出它们发回数据。
答案 1 :(得分:0)
我假设所有代码都有效,而不是记录,因为那是你所要求的。问题是Node没有输出到您的浏览器控制台。
如果它已部署在heroku上,那么您应该会看到所有内容都被记录在那里,否则您可以使用https://github.com/node-inspector/node-inspector等库来输出到您的浏览器。