Socket.IO如何从POST请求发出并从同一台服务器侦听

zf2sa74q  于 2022-10-12  发布在  Node.js
关注(0)|答案(1)|浏览(161)

我想从POST请求发送一些数据到上面的套接字。目前,我正在从res.post发送到客户端,监听并再次从客户端发送到套接字。这是相当复杂的。
我可以这样做吗?

  1. io.on("connection", (socket) => {
  2. socket.on("frompost", (body) => {
  3. console.log(body);
  4. socket.emit("toclient", body);
  5. });
  6. });
  7. app.post("/scan", (req, res) => {
  8. const id = req.body.wheelId;
  9. const token = req.body.token;
  10. const data = {};
  11. //VALIDATE TOKEN HERE
  12. io.sockets.emit("frompost", data); // run listener above
  13. });
vjrehmav

vjrehmav1#

如果您使用API进行身份验证,请使用此最佳实践在套接字中进行授权

在Socket.IO中有一个中间件可用于验证,我们将使用该中间件来验证令牌。

在Socket.IO中从客户端发送令牌

  1. let host "http://localhost:3000" // here is your host
  2. let socket = io(host, {
  3. headers: {
  4. Authorization: "your token"
  5. }
  6. })

对于服务器端

  1. const app = express();
  2. const http = require('http');
  3. const server = http.createServer(app);
  4. const { Server, Socket } = require('socket.io');
  5. const jwt = require("jsonwebtoken");
  6. // set limit of data(1e6 = 1mb)
  7. const io = new Server(server,{
  8. maxHttpBufferSize: 1e9
  9. });
  10. //socket io middleware
  11. io.use((socket, next) => {
  12. const { authorization } = socket.handshake.headers;
  13. try {
  14. socket.user = jwt.verify(authorization, process.env.SECRET_KEY);
  15. next()
  16. } catch (error) {
  17. error.statusCode = 401
  18. console.log("unauthorized User")
  19. next(error)
  20. }
  21. });

当用户连接并发生事件时,此Socket.IO中间件将检查身份验证令牌

展开查看全部

相关问题