node.js - 将 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]
浏览器控制台。
服务器似乎出了点问题,但我找不到发生了什么
任何想法 ?
谢谢
解决方案
尝试这种方式,您需要将 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 如何一起使用的框架。请根据您的需要进行修改。
祝你好运。
推荐阅读
- javascript - 在 Bootstrap 选项卡中滚动到页面顶部
- ios - 比较字典中的元素,Swift
- c - 如何正确地将字符串数组存储到数组中(在 C 中)?
- r - 将 R 中的两列相加,使得 NA+NA=NA,但 NA+(a number)=0+(a number)
- apache-kafka - 如何将特定数据分配给 Kafka 中的用户?
- c# - 带信号量的睡眠理发师的多线程问题
- c++ - C++上的向量迭代器
- c++11 - CComboBoxEx:在组合框编辑组件中显示项目时隐藏项目的图像
- python-3.x - 在 tensorflow 2.1.0 中强制执行急切
- c# - GetComponent 找不到 UnityUI Image 组件