首页 > 解决方案 > 公共服务器上的 Node.js

问题描述

我正在学习在公共服务器上使用 node.js 作为从服务器到客户端的开放线路(https://github.com/iamshaunjp/websockets-playlist/tree/lesson-5)。我已经完成了一个 youtube 教程来创建一个聊天服务器/客户端。这适用于我自己的机器。

服务器代码(index.js):

var express = require('express');
var socket = require('socket.io');

// App setup
var app = express();
var server = app.listen(4000, function () {
    console.log('listening to request on port 4000');
})

// Static files
app.use(express.static('public'));

// Socket setup
var io = socket(server);

io.on('connection', function (socket) {
    console.log('made socket connection', socket.id);

    socket.on('chat', function (data) {
        io.sockets.emit('chat', data);
    });

    socket.on('typing', function (data) {
        socket.broadcast.emit('typing', data);
    });
});

浏览器代码(/public/chat.js):

// Make connection
var socket = io.connect('http://localhost:4000');

// Query DOM
var message = document.getElementById('message');
var handle = document.getElementById('handle');
var btn = document.getElementById('send');
var output = document.getElementById('output');
var feedback = document.getElementById('feedback');

// Emit events

btn.addEventListener('click', function () {
    socket.emit('chat', {
        message: message.value,
        handle: handle.value
    });
});

message.addEventListener('keypress', function () {
    socket.emit('typing', handle.value);
});

// Listen for events

socket.on('chat', function (data) {
    feedback.innerHTML = '';
    output.innerHTML += '<p><strong>' + data.handle + ':</strong>' + data.message + '</p>';
});

socket.on('typing', function (data) {
    feedback.innerHTML = '<p><em>' + data + ' is typing a message...</em></p>';
});

浏览器代码(public/index.html):

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Websockets 101</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.3.0/socket.io.js"></script>
    <link href="/styles.css" rel="stylesheet" />

</head>
<body>
    <div id="mario-chat">
        <div id="chat-window">
            <div id="output"></div>
            <div id="feedback"></div>
        </div>
        <input id="handle" type="text" placeholder="Name" />
        <input id="message" type="text" placeholder="Message" />
        <button id="send">Send</button>
    </div>
    <script src="/chat.js"></script>
</body>
</html>

当我转到 http://localhost:4000 时,我看到了聊天屏幕,我可以聊天(到多个浏览器窗口)。

现在我想将我的代码上传到 ubuntu 开发服务器,但我无法让它工作。我已经在服务器上安装了 Node.js,当我输入 node -vi 时获取版本号,所以安装是正确的。

我下一步要做什么?如果我将代码上传到开发服务器 (http://devserver01/websocket/),它不会显示我的代码,因为我没有 index.html。

在本地主机上,我使用了此代码(package.json):

 {
  "name": "websocket",
  "version": "1.0.0",
  "description": "websocket",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.17.1",
    "socket.io": "^2.3.0"
  },
}

如果我去 http://devserver01/websocket/ 它不起作用(当然),而且 http://devserver01:4000 也不起作用(当然也因为它不知道它必须转到 js 文件) .

但我找不到任何关于如何在远程 linux 机器上部署它的信息。

感谢您的帮助!

标签: node.jsubuntuwebserver

解决方案


推荐阅读