将ionic4 / socket.io连接到expressjs net :: ERR_CONNECTION_REFUSED

时间:2019-04-17 11:11:59

标签: angular express socket.io ionic-native

即使服务器没有运行,我也总是得到net::ERR_CONNECTION_REFUSED

通过我的浏览器运行该应用程序时,它可以正常运行,但是,然后通过该设备并以本机方式运行时,出现上述错误。

我觉得我已经尽一切努力解决了这个问题。我读过这么多关于同一问题的堆栈溢出问题。他们都没有帮助。

app.module:

import { SocketIoModule, SocketIoConfig } from 'ngx-socket-io';
const config: SocketIoConfig = { url: 'http:localhost:8080', options: {}};

注意:上面我也尝试过:

  

'https://localhost:8080'

     

'https://localhost:8080/'

     

'http://localhost:8080/'

     

'127.0.0.1:8080'

     

'127.0.0.1:8080 /'

     

'http://127.0.0.1:8080'

     

'http://127.0.0.1:8080/'

     

'https://127.0.0.1:8080'

     

'https://127.0.0.1:8080/'

socketio服务器:

const app = require('express')();
const PORT = process.env.CHAT_PORT || 3000;
const ENV = process.env.NODE_ENV || 'development';
const server = require('http').createServer(app , {origins: 'http://127.0.0.1:8100'}); 
const io = module.exports.io = require('socket.io')(server);
const SocketManager = require('./lib/SocketManager');

注意:由于Ionic 4应用程序在端口8100上运行,因此我尝试了origins:中所有与上述相同的变化,但是更改了端口。我还尝试了不包含origins:

我的SocketService:

import { Socket } from 'ngx-socket-io';
import { Observable } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
    export class ChatService {

      constructor(private socket: Socket) {}

      public sendMessage(msg: any){
        this.socket.emit('new-message', msg);

      }

      public getMessages = () => {
        return Observable.create(observer => {
          this.socket.on('new-message', messageObj => {
            observer.next(messageObj);
          })
        })
      }
    }

我希望它能执行的操作是连接,并让我的服务器注册已建立连接。

感谢您的帮助

更新:我已经将config.xml配置为:

   <content original-src="index.html" src="http://192.168.1.38:8100" />
    <access origin="*" />
    <allow-navigation href="*" />

没有这种运气。仍然被阻止

2 个答案:

答案 0 :(得分:1)

尝试并搜索后,一旦我将笔记本电脑砸碎以解决此错误,我将得到以下答案

首先

要在设备上运行它,必须将IP Adress192.168.1.2放在应用程序中,打开CMD并输入ipconfig即可获得。 Windows,因此在您的应用中必须是

const config: SocketIoConfig = { url: 'http://IP_ADDRESS:8080', options: {}};

第二

实际上这是我的问题,请转到防火墙并仅将其禁用以进行测试,如果要生成您的应用,则只需启用运行该应用的端口即可

  

请注意,您必须关闭它才能接受指定端口上的连接

最后

确保您的本地服务器接受客户端的请求,您可以使用Cors外部软件包。

要安装它:

npm install cors --save

要使用它:

const cors = require('cors');
app.use(cors({
  origin: '*', //Or some origins you can specify
  optionsSuccessStatus: 200
}));

答案 1 :(得分:0)

所以,我解决了这个问题。这个问题很愚蠢,我为解决这样的问题感到ham愧。但是问题是,当我尝试将电话连接到服务器时,我使用的是本地主机127.0.0.1:8080的IP地址,在客户端,此地址向内看!我需要做的是转到Apple->系统偏好设置->网络,然后使用以下IP地址:

  

Wi-Fi已连接到MOVISTAR_PLUS_52B1   并具有IP地址192.168.X.XX。

将其放入我的配置中,如下所示: const config: SocketIoConfig = { url: 192.168.X.XX, options: {}};