簡體   English   中英

是否可以在快速路由中實現 socket.io 連接?

[英]Is it possible to implement socket.io connection in express route?

我實現了一個支付服務,它依賴於我的一個快速路由作為回調路由,所以每當用戶想要支付時,他們將被重定向到這個與我的后端/前端域完全不同的支付服務鏈接。 付款成功后,用戶將被重定向到我的快速GET路由(回調路由),在這條路由中,我將他們的資產提供給用戶,然后將他們重定向到前端。

EXPECTATION我的期望是,每當用戶進行購買時,我希望在前端進行實時更新,以便其他人在不刷新瀏覽器的情況下查看有關購買的一些詳細信息。

WHAT I'VE TRIED我曾認為 socket.io 會解決這個問題,比如在路由中添加一個套接字連接,然后將數據推送到前端。 但是在進行了大量研究之后,似乎沒有任何解決方案適合我。

HERE IS A SIMPLE CODE OF WHAT I'VE TRIED

===============================server.js ================ ========

const express = require("express")
const app = express()
const http = require("http")
const cors = require("cors")
const session = require("express-session")
const runSocket = require("./runSocket")
const { Server } = require("socket.io")

app.use(cors())
app.use(express.json())

const server = http.createServer(app)

server.listen(3004, () => {
  console.log("SERVER IS RUNNING")
})
const io = new Server(server, {
  cors: {
    origin: "http://localhost:3000",
    methods: ["GET", "POST"],
  },
})


const postRoute = require("./routes/postData")(io)

app.use("/post-data", postRoute)

====================================post數據路由============ ==========================

module.exports = function (io) {
  router.post("/", async (req, res) => { 
    const data = req?.body?.data.message
    const room = req?.body?.data?.room

    io.on("connection", (socket) => {
      console.log("Socket Running...")
      socket.to(room).emit("the_message", data)
    })

    console.log("Under socket...")
    return res.status(200).json({ data: req.body.data })
  })

  return router
}

此日志:在 postData 路由中未打印console.log("Socket Running...")

EXPECTATION我的期望是,每當用戶進行購買時,我想在前端進行實時更新,以便其他人看到有關購買的一些細節。

更新:支付網關配置看起來像這樣:

 const { body } = await got.post("https://payment-provider-link", {
    headers: { Authorization: "Bearer token for payment" },
    json: {
      email: "email@gmail.com",
      amount: amount * 100,
      initiate_type: "inline",
      callback_url: `${BackendBaseUrl}/payment-callback`, // <<<============
    },
  })

好的,所以您不需要 io.on("connection") 在您的路線中。 刪除那段代碼,只需將其更改為 io.to(room).emit("the_message", data)。 還要確保讓其他 sockets 加入你試圖發送的房間,否則他們將不會收到數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM