【问题标题】:connecting ionic4/socket.io to expressjs net::ERR_CONNECTION_REFUSED将 ionic4/socket.io 连接到 expressjs net::ERR_CONNECTION_REFUSED
【发布时间】:2019-04-17 11:11:59
【问题描述】:

我一直收到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');

注意:我在origins: 中尝试了所有与上述相同的变体,除了更改端口,因为我的 Ionic 4 应用程序在端口 8100 上运行。我还尝试不包括 origins:

我的套接字服务:

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="*" />

没有这样的运气。不过还是被屏蔽了

【问题讨论】:

    标签: angular express socket.io ionic-native


    【解决方案1】:

    一旦我在尝试和搜索后因为这个错误而砸碎我的笔记本电脑,我得到的答案如下

    首先

    要在您的设备上运行它,您必须在您的应用程序中输入 IP Adress 就像 192.168.1.2,如果您使用的是 Windows,您可以通过打开 CMD 并输入 ipconfig 来获取,所以在您的应用程序中必须是

    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
    }));
    

    【讨论】:

    • 非常感谢您的回答,并将考虑解决该问题!!!还想扔我的电脑!但是,当您谈论防火墙时,您是否还指的是 OS X?
    • 是的,你必须把它关掉
    • 我一直在尝试您的建议,但似乎无法使其发挥作用。我将 app.module 中的配置更改为 'http://127.0.0.1:8080/',禁用了我的防火墙,并在我的服务器上设置了 cors 以允许与 app.use(cors()) 的任何连接我解决了一次,但后来我保存了,问题又回来了?
    • 请不要使用127.0....,因为它等于localhost,请确保使用您的IP地址,对于cors(),请按照我在答案中提到的那样尝试,我的意思是将原点设置为*或localhost: + PORT , PORT 是指你的应用使用的端口
    【解决方案2】:

    所以,我解决了这个问题。这个问题很愚蠢,我很惭愧这样解决它。但问题是,当我尝试将手机连接到服务器时,我使用的是 localhost 127.0.0.1:8080 的 IP 地址,而客户端则向内看!我需要做的是转到 Apple->System Preferences->Network,然后使用以下 IP 地址:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-09
      • 1970-01-01
      • 2016-01-29
      • 2020-11-18
      • 2017-11-18
      • 1970-01-01
      相关资源
      最近更新 更多