express js,拒绝连接到来自其他计算机的端点

Posted

技术标签:

【中文标题】express js,拒绝连接到来自其他计算机的端点【英文标题】:express js, connection refused to endpoints from other computers 【发布时间】: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 地址 【参考方案1】:

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

【讨论】:

应用在 Heroku 上的情况如何?它不再以我的 IP 为目标,离开 localhost 是否有意义? 你不应该像 localhost 一样离开你的客户端网页 ip。因为当其他人进入您的站点时,当您上传文件时,他会在 localhost ip 上得到要点,而他对 localhost 将一无所知。客户端 ip 必须以服务器为目标 express需要和Heroku同时运行吗?也许我不明白 Heroku 是如何工作的。我以为它正在运行它,节点快递在他们的服务器中做出反应。但你是说我需要把我的 IPv4 地址放在那里? 我说您的客户端应用程序需要针对您的服务器 ip。如果您正在运行您的服务器 localhost 然后定位您的 IPv4 地址如果您在公共服务器中运行它然后定位公共服务器 ip

以上是关于express js,拒绝连接到来自其他计算机的端点的主要内容,如果未能解决你的问题,请参考以下文章

无法将 Express.js 服务器连接到 Angular 前端

在 express.js 中连接到 Mongodb-Native-Driver

mongo-express 没有连接到 mongodb

生产 Angular 应用程序连接到本地 Express 实例而不是生产 Express 实例

Heroku 上的 Node.js Express 应用程序不会使用 Mongoose 连接到 MongoLab 数据库

无法连接到 NodeJS Express 服务器