【发布时间】:2022-01-16 23:58:29
【问题描述】:
下午好。我是在 node.js 中编程套接字的新手,我需要在我的应用程序的控制器中实现 socket.io。我的架构如下:
启动服务器的文件是index.js
const express = require('express');
const app = express();
const port = 3000;
const socketRouter = require('./routes/socket')
app.use(express.json());
//Route
app.use('/socket', socketRouter);
app.listen(port, () => {
console.log(`Server connection on http://127.0.0.1:${port}`); // Server Connnected
});
我定义路由的文件是socket.js
const { Router } = require('express');
const { showData } = require('../controllers/socket');
const router = Router();
router.post('/send-notification', showData);
module.exports = router;
我的控制器是:
const { response } = require('express');
const showData = (req, res = response) => {
const notify = { data: req.body };
//socket.emit('notification', notify); // Updates Live Notification
res.send(notify);
}
module.exports={
showData
}
我需要在这个控制器中实现 socket.io 才能从它发出,但我不能让它工作。你能告诉我怎么做吗? 非常感谢
澄清:如果我在主文件中实现 socket.io,它可以工作,但我想要一些顺序和分开的东西。它是这样工作的:
const express = require('express');
const app = express();
const port = 3000;
app.use(express.json());
app.post('/send-notification', (req, res) => {
const notify = { data: req.body };
socket.emit('notification', notify); // Updates Live Notification
res.send(notify);
});
const server = app.listen(port, () => {
console.log(`Server connection on http://127.0.0.1:${port}`); // Server Connnected
});
const socket = require('socket.io')(server);
socket.on('connection', socket => {
console.log('Socket: client connected');
});
【问题讨论】:
-
在您的
app.post()中显示socket.emit(),您要向哪个套接字发射?而且,POST 是来自浏览器中的表单提交还是来自网页中的 Javascript? -
一个 post 请求来自 localhost:3000/send-notification 路由,对象“data”作为参数来自网络上的表单。然后,在收到所述请求后,向所有正在监听“通知”事件的客户端发出发射。但我不想在 index.js 中有这个逻辑,而是在一个单独的控制器中,如开头所示