【问题标题】:How can I show a website to other people if it's hosted locally?如果网站托管在本地,我如何向其他人展示它?
【发布时间】:2022-01-05 19:39:25
【问题描述】:

我刚刚开始学习后端,我设法用 nodejs 编写了一些简单的东西,但我也想在其他计算机上测试我的东西并将其展示给其他人 - 即使是一段时间,仅用于学习目的。

例如,我有这个代码

//server.js
const mongoose = require('mongoose');
const Msg = require('./models/messages')
const io = require('socket.io')(3000, {
    cors: {
        origin: "*"
    }
})

const mongoDB = 'mongodb+srv://12345678:jonasjonas@cluster0.ifsxq.mongodb.net/message-database?retryWrites=true&w=majority'

mongoose.connect(mongoDB).then(() => console.log('connected'))

const users = {};

io.on('connection', (socket) => {
    console.log('new user');
    Msg.find().then(result => {
        socket.emit('output-message', result);
    })
    
    socket.on('username', myname => {
        users[socket.id] = myname;
        socket.broadcast.emit('user-connected', myname)
    })
    socket.on('send-chat-message', message => {
        const msg = new Msg({message:message, user:users[socket.id]});
        msg.save().then(() => {
            socket.broadcast.emit('chat-message', {message:message, name:users[socket.id]})
        })

    })
})

//script.js
const socket = io('http://localhost:3000');

var messageContainer = document.getElementById('message-container')
var messageForm = document.getElementById('send-container')

var myname = prompt('Qual é o seu nome?');
appendMessage('You joined')
socket.emit('username', myname);

socket.on('chat-message', data => {
    appendMessage(`${data.name}: ${data.message}`);
})

socket.on('output-message', data => {
    for(let i = 0; i < data.length; i++) appendMessage(`${data[i].user}: ${data[i].message}`);
    console.log(data)
    
})

socket.on('user-connected', myname =>
{appendMessage(`${myname} connected`)}
)

messageForm.addEventListener('submit', e => {

    e.preventDefault();
    const message = document.getElementById('message-input').value;
    socket.emit("send-chat-message", message);
    appendOwnMessage(`You: ${message}`);
    document.getElementById('message-input').value = '';
})

function appendMessage(message) {
    const  a = document.createElement('div');
    const b = a.appendChild(document.createElement('p'))
    b.innerText = message;
    b.setAttribute("class", "received")
    messageContainer.append(a)
}

function appendOwnMessage(message) {
    const  a = document.createElement('div');
    const b = a.appendChild(document.createElement('p'));
    b.innerText = message;
    b.setAttribute("class", "sent")
    messageContainer.append(a)
}
<script defer src='http://localhost:3000/socket.io/socket.io.js'></script>
    <script defer src='script.js'></script>
    <link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
    <div id='test'></div>
    <div id= 'message-container'></div>
    <div id='test'></div>
    <form id='send-container'>
        <input id="message-input" type='text'>
        <button type='submit' id='send-button'>Send</button>
    </form>

(对不起,拖了这么久)是否可以生成其他计算机上的人可以访问的 URL?我可以学到什么来实现这一目标?

【问题讨论】:

  • 您包含的代码与问题完全无关。您的问题是关于其他人看到网络服务器需要什么。你在上面运行什么代码并不重要。
  • @StephenOstermiller 抱歉,我只是认为由于设置服务器的方式不同,因此代码会有点相关。

标签: node.js mongoose socket.io localhost hosting


【解决方案1】:

您可以配置您的家庭路由器以将连接重定向到您的个人计算机,以便在特定端口上进行连接(在您的情况下为3000)。

这通常通过位于您的网络网关(最常见的是192.168.0.1)的 WebApp 完成。

此功能通常称为Port Forwarding。然后,您可以通过谷歌搜索轻松找到您的公共 IP 地址。

但是,除非您知道自己在做什么,否则不建议这样做,因为将您的计算机暴露在互联网上可能不安全。

我宁愿推荐使用像ngrok 这样的工具,它可以通过他们的网络在您的本地计算机上创建一条通往您选择的端口的隧道。这不仅更快,而且更安全。

如果您正在寻找更持久的解决方案,可能使用自定义域,那么您应该寻找网站托管解决方案。绝不建议在您的家用计算机上运行生产网站。

【讨论】:

    【解决方案2】:

    嘿,我不确定这是否是您要查找的内容,但您可以在 https://replit.com/ 上创建一个帐户并将您的代码放在那里。你也可以将它导入到 replit,例如 github :) 我希望这可能对您有所帮助:) 您也可以与其他人分享上传的项目。

    这是您的项目在此处的外观截图:

    enter image description here

    【讨论】:

      猜你喜欢
      • 2014-10-03
      • 1970-01-01
      • 2021-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      相关资源
      最近更新 更多