首页 > 解决方案 > 将 socketio 添加到 API Express 的问题

问题描述

我正在尝试在我已经存在的 NodeJS API REST 项目上添加 socket.io。

var express = require('express')
var bodyParser = require('body-parser');
var https = require('https');
var http = require('http');
var fs = require('fs');
var router = require('./route/router');
require('dotenv').config();

var app = express();

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

app.use(require('helmet')());

app.use(function (req, res, next) {
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
    res.setHeader('Access-Control-Allow-Headers', 'Authorization,Content-Type');
    next();
});

router(app);

if (process.env.PRODUCTION === "false") {
    http.createServer(app).listen(8080, function() {
        console.log('8080 ok');
    });

    var io = require('socket.io')(http);
} else {
    const options = {
        cert: fs.readFileSync('./../../etc/letsencrypt/live/test.com/fullchain.pem'),
        key: fs.readFileSync('./../../etc/letsencrypt/live/test.com/privkey.pem')
    };

    https.createServer(options, app).listen(8443, function() {
        console.log('8443 ok');
    });   

    var io = require('socket.io')(https);
}

io.sockets.on('connection', socket => {
  console.log('socketio connected');
});

我没有显示错误(服务器端)。但是,当我在客户端尝试时this.socket = io('ws://localhost:8080/');,它根本不起作用。

我得到GEThttp://localhost:8080/socket.io/?EIO=3&transport=polling&t=NG6_U6i [HTTP/1.1 404 Not Found 1ms]浏览器控制台。

服务器似乎出了点问题,但我找不到发生了什么

任何想法 ?

谢谢

标签: node.jssocket.io

解决方案


尝试这种方式,您需要将 express 服务器包含(我不知道这是否是正确使用的词)到 socket.io 服务器中。

const express = require('express');
const socketio = require('socket.io');
const port = process.env.PORT || 3006;

const app = express();

const server = app.listen(port, () => {
  console.log(`App started on port ${port}`)
});

const io = socketio(server, { forceNew: true });
io.on('connect', (socket) => {
  // do this
  // do that
});

上面的代码是 express 和 socket.io 如何一起使用的框架。请根据您的需要进行修改。

祝你好运。


推荐阅读