NodeJS仅监听本地主机。

6
我开发了一个基于NestJS Server的应用程序。NestJs是一个用TypeScript编写的基于Express的Node服务器。
现在我想在我的树莓派上部署这个应用程序。然而,我只能从本地主机访问该服务器。如果我尝试从不同的客户端访问,则没有任何内容返回。(图片中的“^C”只是取消标志;D)
我已经将主机名设置为0.0.0.0。还能做什么?
# /src/main.ts 
import {NestFactory} from '@nestjs/core';
import {AppModule} from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.enableCors();
  await app.listen(3001, '0.0.0.0');
}

See picture


你能否确认请求是否离开了本地机器并通过防火墙返回?你可能需要打开防火墙端口。 - SlimSim
我已经删除了所有的 iptable 规则,并将默认策略设置为接受(ACCEPT)。 - Rose Nettoyeur
你可以尝试使用 listenAsync 而不是 listen 吗?https://github.com/nestjs/nest/blob/master/packages/common/interfaces/nest-application.interface.ts#L55 - SlimSim
我尝试了,但问题仍然存在 :( - Rose Nettoyeur
@RoseNettoyeur 你是否在你的路由器防火墙中打开了端口?从你的截图来看,你似乎试图访问你的路由器的“公共”/WAN IP。要使其正常工作(当在局域网中工作时),你还需要在你的路由器中打开3001端口。顺便提一下:可能仍然无法正常工作,因为你的路由器无法处理头发针NAT。请尝试使用连接到LTE而非WiFi的智能手机进行测试。 - undefined
2个回答

0

您需要打开防火墙端口和服务,如下所示(适用于CentOS):

#add port
sudo firewall-cmd --add-port=3001/tcp  --permanent

# add service
sudo firewall-cmd --permanent --add-service=http

# reload !!! IMPORTANT !!!
sudo firewall-cmd --reload

谢谢您的回答。 操作系统是全新的Raspbian。默认情况下没有防火墙,我也没有安装防火墙。 我还删除了所有IP-Table规则并将默认策略设置为接受。但是没有帮助。 问题依旧 :( - Rose Nettoyeur
我在我的RasberryPi盒子上运行了一个简单的节点应用程序,看起来它似乎可以通过服务器IP在局域网中直接访问 - 或许是因为我已经配置并且使LAMP服务器工作了? - Darek Adamkiewicz
不要!不要这样做。请配置您的应用程序与您的编程框架,并确保您的本地环境安全。 - Fran Bonafina

0
const express = require('express');
const app = express();
const port = 3000; // Choose your desired port

app.get('/', (req, res) => {
  res.send('Hello, World!');
});

// Change from 'localhost' to '0.0.0.0'
app.listen(port, '0.0.0.0', () => {
  console.log(`Server is listening on port ${port}`);
});

你好,你能解释一下这个怎么解决问题吗?谢谢 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接