【发布时间】:2021-05-01 18:22:31
【问题描述】:
我正在尝试根据邮递员的发布请求为套接字创建发射,但遇到了一些麻烦。我发现了一个问题here,但它似乎对我不起作用。我的 app.js 中有这段代码
App.js
const express = require('express')
const bodyParser = require('body-parser')
const app = express()
const http = require('http').createServer(app)
const eventsRoute = require('./routes/eventsRoute')
const io = require('socket.io')(http, {
cors: {origin: "*"},
path: '/api/events'
})
io.of('/api/events/').on('connection', socket => console.log('connected'))
...
app.use('/api/events', eventsRoute(io))
module.exports = app
这里我得到了 eventsRoute.js 代码。我认为这是主要问题
eventsRoute.js
const express = require('express')
const errorHandler = require('../utils/errorHandler')
const router = express.Router()
const returnRouter = io => {
router.post('/', async (req, res) => {
try {
io.sockets.emit('create', req.body)
res.status(200).json({message: 'successful'})
} catch (e) {
errorHandler(e)
}
})
router.get("/", function (req, res) {
try {
res.send({})
} catch (e) {
errorHandler(e)
}
})
return router
}
module.exports = returnRouter
在我的客户端,我在脚本标签中有一些代码。在这里
<script src="https://cdn.socket.io/3.1.3/socket.io.min.js"></script>
<script>
const socket = io('ws://localhost:5000', {path: '/api/events'})
socket.on('create', data => {
console.log(data)
})
</script>
【问题讨论】:
-
我可以通过一些更改使其工作:1 - 我没有在服务器选项中使用
path,2 - 我使用ws://localhost:5000/api/events并删除了客户端中的选项,3 - 相反在create事件中收听(从不触发),我在socket.on('connect')上听过 -> screenshot example
标签: node.js express sockets socket.io