做了个用Nodejs、mongodb、socketio的聊天室,但是访问的配置只能是localhost,我改成别的域名后,连db都不能访问了,怎么破?

做了个用Nodejs、mongodb、socketio的聊天室,但是访问的配置只能是localhost,我改成别的域名后,连db都不能访问了,怎么破?

在同一台电脑上用localhost作为域名,可以多开窗口实现聊天室的功能。然后我想改成同一个局域网里,多台不同的电脑都能用,于是host里配了我的实际ip到chat.test.com,mongodb(用这个来保存注册用户的信息)里的设置写的是chat.test.com还有socketio里访问设置的是chat.test.com,但是以chat.test.com访问的时候,mongodb会报没有授权访问。另外,端口怎么解决呢?我写的是3000端口,但是host里怎么配?访问的时候url又要带上这个3000吗?谢谢~


8 回复

要解决这个问题,你需要确保你的应用正确地配置了域名、端口以及数据库连接。以下是一个简化的解决方案:

1. 确保域名和端口正确配置

首先,你需要确保你的域名和端口在服务器配置中正确无误。例如,如果你将 chat.test.com 解析到你的服务器IP地址,并且使用3000端口,你需要确保你的应用能够监听该端口。

示例代码:服务器启动

const express = require('express');
const app = express();
const http = require('http').createServer(app);
const io = require('socket.io')(http);

app.get('/', (req, res) => {
    res.sendFile(__dirname + '/index.html');
});

io.on('connection', (socket) => {
    console.log('a user connected');
    socket.on('disconnect', () => {
        console.log('user disconnected');
    });
});

http.listen(3000, '0.0.0.0', () => {
    console.log('listening on *:3000');
});

2. 配置 MongoDB 连接

确保你正确配置了 MongoDB 的连接字符串。通常情况下,MongoDB 不需要特殊的域名配置,只需要正确的连接字符串即可。

示例代码:MongoDB 连接

const mongoose = require('mongoose');

mongoose.connect('mongodb://your-ip-address:27017/your-database-name', {
    useNewUrlParser: true,
    useUnifiedTopology: true
}).then(() => {
    console.log('Connected to MongoDB');
}).catch((err) => {
    console.error('Failed to connect to MongoDB', err);
});

3. DNS 和端口解析

确保你的DNS配置正确,使得 chat.test.com 能够解析到你的服务器IP地址。此外,如果防火墙或路由器设置了端口转发规则,确保它们允许外部设备通过3000端口访问你的服务器。

4. 客户端连接

客户端也需要正确配置以连接到你的服务器。确保你在HTML文件中正确引用了Socket.IO库,并且URL指向正确的域名和端口。

示例代码:客户端连接

<!DOCTYPE html>
<html>
<head>
    <title>Chat Room</title>
    <script src="/socket.io/socket.io.js"></script>
    <script>
        const socket = io('http://chat.test.com:3000');
        socket.on('connect', () => {
            console.log('Connected to server');
        });
    </script>
</head>
<body>
    <!-- Your chat UI here -->
</body>
</html>

总结

通过以上步骤,你应该能够解决跨域名访问的问题。确保域名解析正确,服务器配置正确监听端口,以及客户端正确连接到服务器。希望这些信息能帮助你解决问题!


chat.test.com 127.0.0.1:3000

mongodb就不知道了

host里我写的是: 172.100.1.1 chat.test.com 当然这个ip是我实际的ip 不是127.0.0.1 写127.0.0.1的话别的电脑还是访问不到吧 mongodb的配置是: module.exports = { cookieSecret: ‘chat’, db: ‘chat’, host: ‘localhost’ }; 这里host改成chat.test.com mongodb就会说无授权 查百度也没找到方法 请问怎么搞啊?

干嘛要改成chat.test.com?mongodb的host就用localhost

mongodb的host我保持了localhost host里写的是: 我的ip test.chat.com 聊天页面里:socket = io.connect(‘http://test.chat.com’); 访问的时候url是test.chat.com:3000 果然能用了 谢谢楼上的帮助 另外还想问下 有什么办法能在输入url的时候,不输入这个3000端口吗? host里我试过: 我的ip test.chat.com:3000 浏览器无法打开test.chat.com 请问这个问题有办法解决么?

3000改称80就不用输入端口了

nodejs里的listen,不带参数的话,就是默认启动80端口? 还是说,host里,都不写端口的话,也是默认访问80端口?

为了解决这个问题,你需要确保你的Node.js服务器、MongoDB数据库以及Socket.IO配置正确地支持你的域名和IP地址。这里有几个关键点需要注意:

  1. 域名解析:首先,确保你的域名chat.test.com正确解析到了你的服务器IP地址。你可以使用ping chat.test.com命令来验证。

  2. Node.js服务器配置

    • 确保你的Node.js应用监听所有网络接口(不仅仅是localhost),可以通过绑定到0.0.0.0或者指定你的IP地址来实现。
    • 示例代码:
      const http = require('http');
      const socketIO = require('socket.io');
      const mongoose = require('mongoose');
      
      const server = http.createServer();
      const io = socketIO(server);
      
      // 连接MongoDB数据库
      mongoose.connect(`mongodb://your_mongodb_server:27017/your_db_name`, { useNewUrlParser: true, useUnifiedTopology: true });
      
      // 监听所有网络接口
      server.listen(3000, '0.0.0.0', () => {
          console.log('Server is running on port 3000');
      });
      
  3. MongoDB配置:确保你的MongoDB服务器允许来自你指定域名的连接。如果你使用的是MongoDB Atlas或类似的托管服务,可以在其控制面板中添加你的IP地址白名单。

  4. Socket.IO配置:确保你的Socket.IO配置正确,并且客户端和服务器之间的通信正常。

    • 示例代码:
      io.on('connection', (socket) => {
          console.log('New client connected');
          socket.on('disconnect', () => {
              console.log('Client disconnected');
          });
      });
      
  5. 防火墙和端口:确保你的服务器防火墙允许从外部访问的端口(例如3000端口)。如果需要,可以在服务器上开放该端口。

通过上述步骤,你应该能够让你的应用程序在局域网内的多个设备上正常工作。记得替换示例代码中的占位符(如your_mongodb_serveryour_db_name)为你自己的具体值。

回到顶部