【问题标题】:Error running socket.io and express-nodejs setup运行 socket.io 和 express-nodejs 设置时出错
【发布时间】:2023-03-15 18:05:01
【问题描述】:

我正在研究 nodejs,使用 spawn 和 socket.io 方法执行 python 脚本。我在控制台上得到输出。但我无法在浏览器上显示它。它显示错误。我已将错误粘贴在下面。谁能帮我解决这个问题。我从this stackoverflow 得到了这个例子 我在这里粘贴我的代码:sample.py

import random, time
for x in range(10):
print(str(random.randint(23,28))+" C")
time.sleep(random.uniform(0.4,5))

index.js

var express = require("express");
var path = require('path');
var bodyParser = require('body-parser');
var fs = require('fs');
var spawn = require('child_process').spawn;
var http = require('http').Server(app);
var io = require('socket.io')(http); 

var app = express();
app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
});
app.post('/showtemp',function(req,res){
   var pathtoScript = spawn('python', ["../External_scripts/sample.py"]);
    pathtoScript.stdout.on('data', function (output) { 
    var val = String(output);
    console.log(val);
    io.sockets.emit('response', { data: val});
});
})
var server = app.listen(8082,'0.0.0.0', function () {

  var port = server.address().port

console.log("App is listening at %s", port)

});

index.html页面

<!doctype html>
<html>
<head>
    <title>Live temperature</title>
    <link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
<div id="liveTemp">Loading...</div>

<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
<script>
        var socket = io();
        socket.on('response',function(msg){
            console.log("msg");
            $('#liveTemp').html(msg.data);
        })
});
</script>

</body>
</html>

我收到这个错误

GET http://localhost:8082/socket.io/?EIO=3&transport=polling&t=LQSVrTN 404 (Not Found)
GET http://localhost:8082/socket.io/?EIO=3&transport=polling&t=LQSVrTN 404 (Not Found)

【问题讨论】:

    标签: javascript python node.js express socket.io


    【解决方案1】:

    您尚未在任何地方启动 Web 服务器或将 socket.io 挂接到它。有几种不同的方法可以做到这一点,但这里有一种可行:

    var express = require('express');
    var app = express();
    var server = require('http').Server(app);
    var io = require('socket.io')(server);
    
    server.listen(80);
    

    注意:您必须在某处看到server.listen()(或等效项)。 而且,您需要将服务器传递给 socket.io,以便它可以连接到它。

    您也可以在不需要自己直接加载http 模块的情况下执行此操作:

    var express = require('express');
    var app = express();
    var server = app.listen(80);
    var io = require('socket.io')(server);
    

    socket.io 文档,了解几个不同的选项here

    【讨论】:

    • 对不起,我忘了发这个。在这里,我正在启动服务器。 var server = app.listen(8082,'0.0.0.0', function () { var port = server.address().port console.log("App is listening at %s", port) });
    • @naik3 - 我无法回复您未显示的代码。除非您发布真正的代码,否则无法提供帮助。您看到的错误看起来好像您没有正确地将 socket.io 连接到您的服务器。这行var io = require('socket.io')(http); 不正确。
    • @naik3 - 只需选择我提供给您的代码序列之一并使用它 - 它们有效 - 我已经为您提供了两个可能的答案供您选择。您正在创建两台单独的服务器,而 socket.io 绑定的那台未启动。 app.listen() 创建了一个新服务器,并且该服务器未连接到 socket.io。连接socket.io的服务器没有启动。
    • @naik3 - 仅供参考,您可以看到 app.listen() here 的代码,并看到它创建了一个与您连接 socket.io 的服务器不同的新服务器。因此,您连接 socket.io 的服务器永远不会启动,因此 socket.io 不起作用。您需要将 socket.io 连接到启动的服务器。
    • @naik3 - 出现什么错误?仅供参考,您的 app.js 中的套接字连接代码需要在您执行 $http.post() 之前很久就完成。您需要在发布之前启动并运行 socket.io 连接,并且您只需要建立一次。错误是从var socket = io() 发生的吗?那是客户端中导致错误的代码行吗?为了进一步帮助您,我需要查看您的代码的“当前”版本以及您的修复。
    猜你喜欢
    • 2018-03-07
    • 2016-12-17
    • 2019-11-09
    • 2018-03-08
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多