【问题标题】:Node + AngularJs + Socket.io: net::ERR_CONNECTION_REFUSED节点 + AngularJs + Socket.io:net::ERR_CONNECTION_REFUSED
【发布时间】:2016-03-30 03:19:05
【问题描述】:

我在浏览器的控制台中不断收到此错误,所以我认为这是一个 angular + socket.io 问题:

GET http://localhost:3000/socket.io/?EIO=3&transport=polling&t=LF3gkk7 net::ERR_CONNECTION_REFUSED

Eventho 我遵循了建议更改 angular var io 之类的建议:

ctrl.socketIo = io();
ctrl.socketIo = io.connect();
ctrl.socketIo = io.connect('http://localhost:3001');

这些都不起作用!

这就是我的 Angular 控制器的外观:

angular.module("app")
    .controller("chatController", [
        'userService',
        function (userService) {

            var ctrl = this;
            ctrl.messages = [];

            ctrl.socketIo = io();
            ctrl.userName = userService.name;

            ctrl.submit = function () {

               ctrl.socketIo.emit("chat_message", ctrl.inputMessage);

               ctrl.messages.push(ctrl.inputMessage);           

               ctrl.inputMessage = null;
            };


            ctrl.socketIo.on("update_clients", function (msg) {

                ctrl.messages.push(msg);

            });

         }]
     );

我的 index.html 路径指向目录:

<!doctype html>
<html>
<head>
 //boilerplate...
</head>

<body ng-app="app">

 //boilerplate...

   <script src="/bower_components/socket.io-client/socket.io.js"></script>

//boilerplate...

</body>
</html>

正如您在我的 dir 结构中看到的,路径正确指向 socket.io.js:

更新

我正在使用 Digital Ocean VPS,当我运行 netstat -a -p 时,似乎没有使用 PORT 3000。

更新 2:

我的应用程序中的一项服务正在尝试连接到 localhost:3000,因此我删除了该部分,因为我现在不需要套接字:

更新3后端代码:

'use strict';

var express = require("express");
var app = express();
var http = require("http");
var server = http.createServer(app);
var io = require("socket.io")(http);

//use environment var PORT or 3001
var portNum = 3001;


//route handler
app.get("/", function (req, res) {

    res.sendFile("./index.html", {root: "./client/"});
});

app.use(express.static('./client'));

io.on("connection", function (socket) {

    socket.on("chat_message", function (msg) {

        socket.broadcast.emit('update_clients', msg);

    });
});


server.listen(portNum, function () {
    console.log("listening on port: " + portNum);
});

【问题讨论】:

  • 端口是否不匹配?您正在使用端口 30003001
  • @MukeshSharma,我在节点端使用:var portNum = process.env.PORT || 3001; 当我调用netstat -a -p时,我也在使用数字海洋 VPS@似乎没有使用 3000 端口
  • 您收到Connection Refused,因为您的后端正在侦听端口3001,您的前端应用正在尝试连接到3000
  • 好的,所以有一个指向端口:3000 的角度服务,现在我删除了该服务,因为我不再需要它并且我遇到了同样的错误,但现在使用 port 3001(我在原始帖子中发布了更新 2) 的完整错误
  • :D 我把答案放在你的评论之前。

标签: angularjs node.js socket.io digital-ocean socket.io-1.0


【解决方案1】:

您收到 404 是因为您的 socket.io 模块未正确初始化。
试试下面的代码。

'use strict';

var express = require("express");
var app = express(); 
var http = require("http").Server(app);
var io = require("socket.io")(http);

//use environment var PORT or 3001
var portNum = 3001;


//route handler
app.get("/", function (req, res) {
   res.sendFile("./index.html", {root: "./client/"});
});

app.use(express.static('./client'));

io.on("connection", function (socket) {
   socket.on("chat_message", function (msg) {
      socket.broadcast.emit('update_clients', msg);
   });
});


http.listen(portNum, function () {
   console.log("listening on port: " + portNum);
});

【讨论】:

    猜你喜欢
    • 2021-07-18
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 2016-04-16
    • 2018-02-22
    • 2023-04-05
    • 1970-01-01
    • 2016-09-15
    相关资源
    最近更新 更多