【问题标题】:express js, connection refused to endpoints from other computersexpress js,拒绝连接到来自其他计算机的端点
【发布时间】:2020-09-28 12:29:42
【问题描述】:

我有一个快速的服务器设置和前端的 React。 express 服务器在端口 5000 上运行并在 3000 上做出反应。我也在使用 JWT 令牌。

如果我从计算机登录应用程序,它在一切上运行都很好。我可以访问 api 端点并取回数据。

如果我使用本地 IP 从同一网络上的另一台计算机登录。我可以进入反应前端,我也可以登录。但是,如果我尝试访问在 localhost:5000 上运行的任何 api 端点,我会收到错误连接被拒绝。设置中似乎一切正常,我无法弄清楚问题是什么。会不会是 Windows 的防火墙阻止?还是仅仅通过路由器?

注意,我也尝试过使用 NGROK,它的行为方式相同。我尝试了 Heroku,更糟糕的是,我什至无法登录,似乎我输入字段是必需的,即使我在那里输入一些东西也很困难,就像每当我使用 Heroku 时它都会向后端发送一个空对象。

Express Server.js

const express = require("express");
const mongoose = require("mongoose");
const bodyParser = require("body-parser");
const passport = require("passport");
const cors = require('cors')
const path = require('path')

const users = require("./routes/api/users");
const tickets = require("./routes/api/tickets");
const alerts = require("./routes/api/alerts");
const avaya = require("./routes/api/avaya");
const exercises = require("./routes/api/exercises");

const app = express();

// CORS Middleware

app.use(cors())
// Bodyparser middleware
app.use(
  bodyParser.urlencoded({
    extended: false
  })
);
app.use(bodyParser.json());



// DB Config
const db = require("./config/keys").mongoURI;

// Connect to MongoDB
mongoose
  .connect(
    db,
    { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true }
  )
  .then(() => console.log("MongoDB successfully connected"))
  .catch(err => console.log(err));

// Passport middleware
app.use(passport.initialize());

// Passport config
require("./config/passport")(passport);

// Routes
app.use("/api/users", users);
app.use('/api/tickets', tickets);
app.use('/api/alerts', alerts);
app.use('/api/avaya', avaya);
app.use('/api/exercises', exercises);


// Serve static assets if in production
// if (process.env.NODE_ENV === 'production') {
//     // Set static folder
//     app.use(express.static('client/build'));

//     app.get('*', (req, res) => {
//       res.sendFile(path.join(__dirname, 'client', 'build', 'index.html'));
//     });
//   }

const port = process.env.PORT || 5000;

app.listen(port, '0.0.0.0', () => console.log(`Server up and running on port ${port} !`));

【问题讨论】:

  • 你的意思是你的 React 应用真的请求http://localhost:5000 吗?它需要向http://servername:5000 发出请求,而不是servername 是您服务器的主机名或IP 地址

标签: javascript node.js express axios jwt


【解决方案1】:

让您的客户端 axios 请求以您的 IPv4 地址和服务器端口为目标,同时确保您可以使用邮递员或类似的方式访问您的 IPv4 地址:5000

【讨论】:

  • 应用在 Heroku 上的情况如何?它不再以我的 IP 为目标,离开 localhost 是否有意义?
  • 你不应该像 localhost 一样离开你的客户端网页 ip。因为当其他人进入您的站点时,当您上传文件时,他会在 localhost ip 上得到要点,而他对 localhost 将一无所知。客户端 ip 必须以服务器为目标
  • express需要和Heroku同时运行吗?也许我不明白 Heroku 是如何工作的。我以为它正在运行它,节点快递在他们的服务器中做出反应。但你是说我需要把我的 IPv4 地址放在那里?
  • 我说您的客户端应用程序需要针对您的服务器 ip。如果您正在运行您的服务器 localhost 然后定位您的 IPv4 地址如果您在公共服务器中运行它然后定位公共服务器 ip
猜你喜欢
  • 1970-01-01
  • 2018-08-06
  • 2012-05-19
  • 1970-01-01
  • 2016-04-15
  • 1970-01-01
  • 1970-01-01
  • 2018-02-18
  • 2015-03-29
相关资源
最近更新 更多