首页 > 解决方案 > 无法通过 localhost 访问 Node.JS 后端

问题描述

我正在为我的前端设置一个 Node 后端来提供数据并与 ReactJS 进行通信。最终,我正在开发新的公司软件来取代我们当前的运输系统。

我使用 Amazon EC2 Ubuntu 16.04 - 出于我自己的业务原因 - 我根本无法让我的 ReactJS 前端与 Socket.IO 与我的 nodeJS 后端与http://localhost:4000/上的 Socket.IO 进行通信。

这是我的反应前端中的 App.js

import React, { Component } from 'react';
import logo from './logo.svg';
import ioClient from 'socket.io-client';
import './App.css';

var socket;

class App extends Component {

  constructor() {
    super();
    this.state = {
      endpoint: 'http://localhost:4000/'
    };
    socket = ioClient(this.state.endpoint);
  }

这是我的后端 nodeJS 索引

const mysql = require('mysql');
const http = require('http');
const express = require('express');
const cors = require('cors');

const app = express();
const server = http.createServer(app);
const io = require('socket.io').listen(server);

//app.use(cors());

app.get('/', (req, res) => {
    res.send('Server running on port 4000')
});

const sqlCon = mysql.createConnection({
    host: 'localhost',
    user: 'admin-user',
    password: 'admin-pass',
    database: 'sample'
});

sqlCon.connect( (err) => {
    if (err) throw err;
    console.log('Connected!');
});

io.on('connection', (socket) => {
    console.log('user connected');
});

server.listen(4000, "localhost", () => {
    console.log('Node Server Running on 4000')
});

我可以让它通过我的实际公共 IP 地址进行通信,但不能通过 localhost。我真的不想在我的公共 IP 地址上公开我的后端,以便与所有用户进行通信。以前可能有人问过这个问题,但老实说,我在任何地方都找不到明确的答案,现在我已经找了 3 天了。节点执行没有问题,就像我说的,如果我从公共 IP 创建 socket.io 连接,我可以让它进行通信,据我所知,节点运行脚本的其余部分没有问题,因为它连接到mariaDB没问题。

标签: javascriptnode.jsreactjssocket.io

解决方案


推荐阅读