当前位置: 首页 > 知识库问答 >
问题:

无法连接错误-Linux服务器上的Node Express应用程序

法烨华
2023-03-14

尝试连接到 Node Express 应用程序时,我在浏览器中收到“无法连接”错误。在(我的服务器 IP 地址)1.1.1.1:5000。该应用程序在我的开发环境中工作正常,但在我的 AWS EC2 Linux 服务器上无法正常工作。

  • Node Express应用程序在dev中的我的计算机上运行
  • 端口5000允许传入TCP。我用一个较小的应用程序(https://hackernoon.com/deploying-a-node-app-on-amazon-ec2-d2fb9a6757eb)测试并确认了这一点。
  • 我确认我的Node Express应用程序正在运行。(我正在使用pm2)
  • PM2一直在~14s重新启动我的Node Express应用程序
  • 我尝试从我的机器上curl到端口5000,我收到一个连接拒绝错误curl:(7)连接到端口50001.1.1.1失败:连接拒绝

更新

    < li >我没有使用< code>pm2 start app.js启动应用程序,而是使用< code>npm start启动应用程序,并且应用程序成功托管在端口5000。 < li >我可以去1.1.1.1:5000,然后回来< code>API正在运行 < li >我使用js fetch api调用位于127.0.0.1:5000的后端,并收到一个< code >跨源请求被阻止:同源策略不允许读取位于http://127 . 0 . 0 . 1:5000/pick ticket/21780482的远程资源。(原因:CORS的请求没有成功)。2 TypeError:尝试提取资源时出现NetworkError。(*注意:我的api和我的nginx/react应用程序在同一个服务器上)`

我的申请从app.js开始

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var cors = require('cors');
var compression = require('compression');
var fetch = require('node-fetch');

var pickTicketRouter = require('./routes/pickTicket');
var kdlRouter = require('./routes/kdl')

console.log('Creating API')
var app = express();
app.use(cors());
app.options('*', cors());

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(compression());
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.get('/', (req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('API is running\n');
});

app.use('/pickTicket', pickTicketRouter);
app.use('/kdl', kdlRouter)

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

/bin/www

#!/usr/bin/env node

/**
 * Module dependencies.
 */

var app = require('../app');
var debug = require('debug')('api:server');
var http = require('http');

/**
 * Get port from environment and store in Express.
 */

var port = normalizePort(process.env.PORT || '5000');
console.log('Listening on port: ', port);
app.set('port', port);

/**
 * Create HTTP server.
 */

var server = http.createServer(app);

/**
 * Listen on provided port, on all network interfaces.
 */

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

/**
 * Normalize a port into a number, string, or false.
 */

function normalizePort(val) {
  var port = parseInt(val, 10);

  if (isNaN(port)) {
    // named pipe
    return val;
  }

  if (port >= 0) {
    // port number
    return port;
  }

  return false;
}

/**
 * Event listener for HTTP server "error" event.
 */

function onError(error) {
  if (error.syscall !== 'listen') {
    throw error;
  }

  var bind = typeof port === 'string'
    ? 'Pipe ' + port
    : 'Port ' + port;

  // handle specific listen errors with friendly messages
  switch (error.code) {
    case 'EACCES':
      console.error(bind + ' requires elevated privileges');
      process.exit(1);
      break;
    case 'EADDRINUSE':
      console.error(bind + ' is already in use');
      process.exit(1);
      break;
    default:
      throw error;
  }
}

/**
 * Event listener for HTTP server "listening" event.
 */

function onListening() {
  var addr = server.address();
  var bind = typeof addr === 'string'
    ? 'pipe ' + addr
    : 'port ' + addr.port;
  debug('Listening on ' + bind);
}

package.json

{
  "name": "api",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "node ./bin/www",
    "dev": "nodemon ./bin/www"
  },
  "dependencies": {
    "compression": "^1.7.4",
    "cookie-parser": "~1.4.4",
    "cors": "^2.8.5",
    "debug": "~2.6.9",
    "express": "~4.16.1",
    "forever": "^1.0.0",
    "http-errors": "~1.6.3",
    "jade": "~1.11.0",
    "morgan": "~1.9.1",
    "mssql": "^5.1.0",
    "node-fetch": "^2.6.0",
    "sequelize": "^5.11.0",
    "tedious": "^6.2.0"
  },
  "devDependencies": {
    "nodemon": "^1.19.1"
  }
}

我期望看到从api得到响应,但却得到一个CORS错误。

共有2个答案

雷硕
2023-03-14

我在应用程序上调用pm2开始.js而不是bin / www

谭梓
2023-03-14

我有几个关于不同环境的问题。您的开发环境是否托管在AWS中?如果没有,我将查看AWS安全组,以确保您的应用程序具有正确的TCP协议。

另外,您是将这个EC2部署到默认的VPC中,还是创建了自己的VPC?如果您创建了VPC,这可能是路由问题或网络级别的问题。

 类似资料:
  • 我有一个问题已经一个月了,但我没有找到解决办法。我的笔记本电脑和个人电脑都有这些问题(我以前启动过mongod): 错误:无法连接到服务器 127.0.0.1:27017 src/mongo/shell/mongo.js:91 异常:连接失败 错误:无法连接到服务器127.0.0.1:27017 src/mongo/shell/mongo。js:93异常:连接失败 错误:无法连接到服务器127.0

  • 我的应用程序,使用套接字。io,无法连接到节点。js服务器。 服务器node.js Android应用程序: 当我连接到服务器时,服务器不会说“socket.name connected”,也不会发出事件“sensorChanged”。问题出在哪里?

  • 问题内容: 关闭。 这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 7年前关闭。 我在linux框IP = 192.168.1.100上安装了mysql服务器,但是当我尝试连接到该IP时总是出错(111)。但是使用localhost并且127.0.0.1可以。 从另一台计算机连接它也会出现错误111。 在这种情况下,使用local

  • 我正在尝试在我的本地计算机上运行,并从 收到错误。 错误消息为:< code >无法连接到服务器:拨tcp 192.168.2.15:8443: connectex:无法建立连接,因为目标计算机主动拒绝连接。 请看下面的截图。 我已经尝试了无法在windows 10上运行Kubernetes (kubectl)和Minikube中的所有建议。无法连接到服务器:拨tcp [::1]:8080: co

  • 问题内容: 当我尝试使用命令行或任何其他mysql客户端(例如phpmyadmin)连接远程MySQL服务器时,它不起作用,并且错误提示为 但是,当我尝试通过本地连接MySQL时,没有问题。 这是用户表()的一部分: 这是iptable: 所以有什么问题? 问题答案: 检查您的mysql服务器是否正在使用netstat监听套接字: 并搜索3306。 如果不是,或者仅在本地主机上,请检查my.cnf

  • 我在localhost上有一个带有mongo数据库的Spring Boot应用程序,一切都很好。 当我运行我的应用程序时,我得到“com.mongodb.mongoSocketOpenException:Exception opening Socket”由“regused by:java.net.SocketTimeoutException:connect timed out”引起