在项目中发现,请求监听 3002 端口、socket.io 监听 8090 端口
在本地运行无误,但传到线上发现无法与 socket.io 建立链接
以下是我得代码:
const fs = require('fs')
const path = require('path')
const http = require('http')
const https = require('https')
const express = require('express')
const app = express()
// 允许跨域
app.all('*', (req, res, next) => {
res.header('Access-Control-Allow-Origin', '*')
res.header('Access-Control-Allow-Headers', 'content-type')
res.header('Access-Control-Allow-Methods', 'DELETE,PUT,POST,GET,OPTIONS')
if (req.method.toLowerCase() == 'options')
res.sendStatus(200)
else
next()
})
// 获取 https 请求参数
const bodyParser = require('body-parser')
app.use(bodyParser.urlencoded({
extended: false
}))
app.use(bodyParser.json())
// 连接 mongodb 数据库 writeOff
const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost/writeOff', {
useNewUrlParser: true,
useUnifiedTopology: true
}).then(doc => {
console.log('mongoose.connect success')
}).catch(err => {
console.log('mongoose.connect fail', err)
})
const schema = {
name: String,
bulletChat: String,
fabulous: 0
}
var Kitten = mongoose.model('meetings', schema)
app.post('/update', (req, res) => {
Kitten.findByIdAndUpdate(req.body.id, {
}, (err, doc) => {
if (err) {
res.send('updata fail')
return
}
console.log('updata success', doc)
res.send(doc)
})
})
app.get('/get', (req, res) => {
Kitten.find().then(doc => {
res.send(doc)
}).catch(err => {
res.send(err)
})
})
// 创建服务
const options = {
key: fs.readFileSync('../../FreeSSL.cn/bj.cn.key', 'utf8'),
cert: fs.readFileSync('../../FreeSSL.cn/bj.cn.crt', 'utf8')
}
// const server = http.createServer(app)
const server = https.createServer(options, app)
// 监听 3002 端口
// server.listen(3002, '0.0.0.0', () => {
// console.log('Http 3002 Server Open')
// })
server.listen(3002, '0.0.0.0', () => {
console.log('Https 3002 Server Open')
})
const server2 = https.createServer(options, app)
const io = require('socket.io')(server2)
// 监听连接事件
io.on('connection', socket => {
console.log('io connection success')
socket.on('disconnect', err => {
console.log('io connection break', err)
})
socket.on('to-server', data => {
console.log('client fail:' + data)
Kitten.create(data).then(() => {
console.log('bulletChat submit success')
io.emit('to-client', data)
}).catch((err) => {
console.log(err)
})
})
})
// 监听 8001 端口
// server.listen(8090, function(){
// console.log('app run at 127.0.0.1:8090')
// })
server2.listen(8090, '0.0.0.0', () => {
console.log('Https 8090 Server Open')
})
我不确定是因为线上使用得 Https 导致得还是其他原因,目前没有排查出来
还望大拿可以指点迷津,谢谢!
Nginx增加如下配置: