我正在尝试在我已经存在的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找不到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如何一起使用的框架。请根据您的需要进行修改。
祝你好运。