Nodejs程序访问不到

Nodejs程序访问不到

lz在虚拟机上搭了node,用的编译好的文件,放到/usr/local下,然后在.bashrc下将lib和node_moudle加入变量里, 在/home/和/usr/local/node下建立example.js

var http=require('http') ;
http.createServer(function (req,res){
        res.writeHead(200,{'Content-Type':'text/plain'});
        res.end('Hello world\n');
}).listen(1337,'127.0.0.1');
console.log('server');

运行也不报错,然后在本地就是访问不到(ip和端口都对)

这是怎么回事?

ps:这网站注册页面都给我弄晕了,一共就俩键,一个github,一个关联旧帐号,不懂啥意思


5 回复

Nodejs程序访问不到

问题描述

lz在虚拟机上搭建了一个Node.js程序,使用的是编译好的文件,并将其放置在 /usr/local 目录下。在 .bashrc 文件中添加了 libnode_modules 到环境变量中。在 /home//usr/local/node 下创建了一个 example.js 文件,内容如下:

var http = require('http');

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello world\n');
}).listen(1337, '127.0.0.1');

console.log('Server running at http://127.0.0.1:1337/');

程序运行时没有报错,但在本地无法访问该服务。

可能的原因及解决方法

  1. 监听地址错误

    • 当前代码中,服务器只监听了 127.0.0.1(即 localhost)。如果想要从外部网络访问,需要监听所有网络接口,即 0.0.0.0
    var http = require('http');
    
    http.createServer(function (req, res) {
        res.writeHead(200, {'Content-Type': 'text/plain'});
        res.end('Hello world\n');
    }).listen(1337, '0.0.0.0'); // 修改为监听所有网络接口
    
    console.log('Server running at http://0.0.0.0:1337/');
    
  2. 防火墙设置

    • 确保虚拟机上的防火墙允许外部访问指定的端口(例如 1337)。
  3. 网络配置

    • 检查虚拟机的网络配置是否正确,确保虚拟机能够与宿主机通信。
  4. 权限问题

    • 确保 Node.js 进程有足够的权限监听指定的端口(1024以下的端口通常需要 root 权限)。

示例代码

修改后的 example.js 如下:

var http = require('http');

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello world\n');
}).listen(1337, '0.0.0.0'); // 监听所有网络接口

console.log('Server running at http://0.0.0.0:1337/');

总结

通过以上步骤,应该可以解决 Node.js 服务无法从外部访问的问题。如果仍然无法访问,请检查虚拟机的网络配置、防火墙设置以及 Node.js 进程的权限。


HTTP/1.1 200 OK
Content-Type: text/plain
Date: Tue, 22 Jul 2014 23:19:38 GMT
Connection: keep-alive
Transfer-Encoding: chunked

Hello world

哦,说明能运行,但为啥本地访问不到呢,我用go写的都能访问到

service iptables stop解决

根据你的描述,你的 Node.js 程序没有在本地访问到。以下是一些可能的原因和解决方法:

  1. 监听地址问题: 你当前的代码中,服务器只监听了 127.0.0.1,也就是 localhost。如果你希望从外部访问,应该使用 0.0.0.0 来监听所有网络接口。

    var http = require('http');
    
    http.createServer(function (req, res) {
        res.writeHead(200, {'Content-Type': 'text/plain'});
        res.end('Hello world\n');
    }).listen(1337, '0.0.0.0'); // 监听所有网络接口
    
    console.log('Server is running on port 1337');
    
  2. 防火墙设置: 确保虚拟机上的防火墙允许外部访问该端口(1337)。你可以临时关闭防火墙来测试是否是防火墙的问题:

    • 在大多数 Linux 发行版中,可以使用以下命令临时关闭防火墙:
      sudo systemctl stop firewalld
      

    或者添加规则允许特定端口:

    sudo firewall-cmd --zone=public --add-port=1337/tcp --permanent
    sudo firewall-cmd --reload
    
  3. 检查虚拟机网络配置: 如果你在虚拟机上运行 Node.js,确保虚拟机的网络配置正确,并且允许与宿主机或其他网络设备通信。通常,虚拟机应配置为桥接模式或 NAT 模式。

  4. 查看日志和错误信息: 尝试在命令行中运行 Node.js 程序,而不是通过其他方式启动,这样可以看到任何潜在的错误信息。

    node /home/your-user/example.js
    
  5. 检查环境变量: 确保 .bashrc 文件中的环境变量配置正确。你可以通过以下命令验证环境变量是否生效:

    echo $PATH
    echo $NODE_PATH
    

以上步骤可以帮助你排查问题。如果仍然无法解决问题,请提供更多关于你的虚拟机环境和网络配置的信息。

回到顶部