nodejs 如何支持打字机效果?

作者站长头像
站长
· 阅读数 12

想用 nodeJs 做个 http 代理,

现在的问题是:响应还是在最后才返回到浏览器,而不是当收到数据时就返回

  const express = require('express')
  const compression  = require ('compression')
  const {
    createProxyMiddleware
  } = require('http-proxy-middleware')
  const app = express()
  app.use(compression())
  const port = 9000

  app.use('/', createProxyMiddleware({
    // secure: true,
    target: 'https://api.openai.com',
    changeOrigin: true,
    selfHandleResponse: true,
    onProxyRes: function (proxyRes, req, res) {
      try {
        res.setHeader('Access-Control-Allow-Origin', '*')
        res.setHeader('Content-type', 'text/event-stream')
        res.setHeader('Cache-Control', 'no-cache')
        res.setHeader('Connection', 'keep-alive')

        // 接收反向代理响应并将其转发给客户端
        proxyRes.on('data', (chunk) => {
          res.write(chunk)
          res.flush()
        })

        proxyRes.on('end', (chunk) => {
          res.end()
        })

      } catch (err) {
        console.log(err)
      }
    }
  }))

  app.listen(port, () => {
    console.log(`Example app listening at http://localhost:${port}`)
  })
回复
1个回答
avatar
test
2024-07-05

构建SSE服务,转发一下数据流,可以参考一下 https://www.ruanyifeng.com/blog/2017/05/server-sent_events.html

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容