socket.io:javascript控制台中出现404错误

时间:2019-11-29 01:54:58

标签: node.js express socket.io http-status-code-404

在Google Chrome浏览器中,example.com/socket.io给出404错误。 所以看来我的socket.io配置有错误。 我不知道他们是什么。 这是我的node.js服务器中最重要的部分:

Server.js

"use strict";
/** Imported modules */
const express = require("express");
const server = express();
var app = require("http").createServer(server);

const io = require("socket.io")(app);

const request = require("./modules/request.js");
const db = require("./modules/database.js")(bcrypt, sequelize);
const io_control = require("./modules/io_control.js")(io, db, sequelize);

/** Page Control Modules */
const PageConfig = require("./modules/page/PageConfig.js");
const CommonItems = require("./modules/page/CommonItems.js");

server.use(express.urlencoded({ extended: true }));
io.origins("*:*");
const Port = process.env.PORT || 3000;
app.listen(Port);

io.on("connection", function(socket) {
  console.log(true);
});

io_control.js

module.exports = (io, db, sequelize) => {
  var controller = new IOControl(io, db, sequelize);

  io.on("connection", function(socket) {
    console.log(true);
    //and a lot of other code inside here.
  });
};

在客户端:像这样:

第一个脚本

<script src="/socket.io" type="application/javascript"></script>

第二个脚本

const socket = io('//web.namei.nl',{path: '/socket.io'},{transports: ['websocket'], upgrade: false}).connect('', {query: `uuid=${getCookie('uuid')}&type=${getCookie('type')}` });

我尝试更改两个脚本,没有结果。

1 个答案:

答案 0 :(得分:1)

由于socket.io客户端脚本源路径为src="/socket.io",因此您得到了404错误,因为该路径似乎无效,因此可能无法解析。

要么使用CDN,指向IO服务器上的位置,例如://web.namei.nl/socket.io/socket.io.js,要么直接下载文件或使用捆绑程序将文件包括在客户端中。

在OP附加评论后更新

如果您无法连接到套接字服务器并且确定URL正确,则:

  1. 在使用Express托管IO时,应启用CORS
  2. 请尝试在不使用websockets进行传输的情况下进行连接,因为托管服务可能会受到限制。
  3. 确保正确配置了您的连接选项-它们似乎不正确。
  4. 如果要限制哪些域可以访问服务器,请仅使用io.origins

在服务器上

const cors = require('cors');
...
const app = express();
app.use(cors());

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

io.on('connection', (socket) => {
   ...
});

const port = process.env.PORT || 3000;
http.listen(port, () => {
    console.log(`listening on ${port}`);
});

客户

// ensure the URL including port are correct below, also first connect without the additional query option
const socket = io('https://web.namei.nl', {
   query: `uuid=${getCookie('uuid')}&type=${getCookie('type')}`
});

socket.on('connection', () => {
   console.info('connected');
});