最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

将socket.io添加到现有的Express项目(前面有React)

IT培训 admin 6浏览 0评论

将socket.io添加到现有的Express项目(前面有React)

我有一个用Express编写的现有项目,我在其中创建了一个邮件系统。一切都在POST / GET方法上进行(发送和接收消息)。我想让它们实时显示,因此我在客户端和服务器端都安装了socket.io。在我的server.js中,添加了以下几行:

const http = require("http");
const io = require("socket.io");
const server = http.createServer();
const socket = io.listen(server);

并将我的app.listen(...)更改为server.listen(...)。还添加了:

socket.on("connection", socket => {
    console.log("New client connected");
    socket.on('test', (test) => {
        console.log('test-test')
    });

    socket.emit('hello', {hello:'hello!'});

        socket.on("disconnect", () => console.log("Client disconnected"));
});

在前面,我将这样的代码放在componentDidMount方法中:

const socket = socketIOClient();
socket.emit('test', {test:'test!'})
socket.on('hello', () => {
    console.log('aaa')
})

现在我有两个问题。尽管console.log()可以正常工作,但是我在React应用程序上遇到了一个错误:

WebSocket connection to 'ws://localhost:3000/sockjs-node/039/lmrt05dl/websocket' failed: WebSocket is closed before the connection is established.

这正常吗?

此外,当我将app.listen(...)文件中的server.listen(...)更改为server.js时,我的路由停止工作。所有的POST和GET方法都不起作用,因为服务器无休止地响应。是否可以仅在特定路由文件中的特定方法上使用socket.io?

我以这种方式保留我的路由:app.use('/api/user', user);,其中用户是路由器文件。

更新:完整的server.js要求:

const express = require('express');
const mongoose = require('mongoose');
const dotenv = require('dotenv');
const bodyparser = require('body-parser');
const passport = require('passport');

const user = require('./routes/api/v1/User');
const company = require('./routes/api/v1/Company');

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


const app = express();

dotenv.config();
app.use(passport.initialize());
require('./config/seed');

require('./config/passport')(passport);
const server = http.createServer();
const socket = io.listen(server);

回答如下:

您没有正确初始化服务器。尝试进行以下更改

// const server = http.createServer();
const server = http.createServer(app);

将socket.io添加到现有的Express项目(前面有React)

我有一个用Express编写的现有项目,我在其中创建了一个邮件系统。一切都在POST / GET方法上进行(发送和接收消息)。我想让它们实时显示,因此我在客户端和服务器端都安装了socket.io。在我的server.js中,添加了以下几行:

const http = require("http");
const io = require("socket.io");
const server = http.createServer();
const socket = io.listen(server);

并将我的app.listen(...)更改为server.listen(...)。还添加了:

socket.on("connection", socket => {
    console.log("New client connected");
    socket.on('test', (test) => {
        console.log('test-test')
    });

    socket.emit('hello', {hello:'hello!'});

        socket.on("disconnect", () => console.log("Client disconnected"));
});

在前面,我将这样的代码放在componentDidMount方法中:

const socket = socketIOClient();
socket.emit('test', {test:'test!'})
socket.on('hello', () => {
    console.log('aaa')
})

现在我有两个问题。尽管console.log()可以正常工作,但是我在React应用程序上遇到了一个错误:

WebSocket connection to 'ws://localhost:3000/sockjs-node/039/lmrt05dl/websocket' failed: WebSocket is closed before the connection is established.

这正常吗?

此外,当我将app.listen(...)文件中的server.listen(...)更改为server.js时,我的路由停止工作。所有的POST和GET方法都不起作用,因为服务器无休止地响应。是否可以仅在特定路由文件中的特定方法上使用socket.io?

我以这种方式保留我的路由:app.use('/api/user', user);,其中用户是路由器文件。

更新:完整的server.js要求:

const express = require('express');
const mongoose = require('mongoose');
const dotenv = require('dotenv');
const bodyparser = require('body-parser');
const passport = require('passport');

const user = require('./routes/api/v1/User');
const company = require('./routes/api/v1/Company');

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


const app = express();

dotenv.config();
app.use(passport.initialize());
require('./config/seed');

require('./config/passport')(passport);
const server = http.createServer();
const socket = io.listen(server);

回答如下:

您没有正确初始化服务器。尝试进行以下更改

// const server = http.createServer();
const server = http.createServer(app);
发布评论

评论列表 (0)

  1. 暂无评论