javascript 获取res.flush不是express-sse中的函数

tzdcorbm  于 2023-06-28  发布在  Java
关注(0)|答案(1)|浏览(189)

我尝试使用express-sse来生成通知,并在下订单时自动调用API。
下面是我的API:

router.post("/createOrder", async (req, res) => {
    try {
        let { orderItems, email, orderStatus, paymentStatus, orderType, orderAmount, tableId } = req.body

        const order = await Order.create({
            orderItems, email, orderStatus, paymentStatus, orderType, orderAmount
        });
        await Table.updateOne({ tableId: tableId },
            {
                $set: {
                    currentOrders: { $push: { orderItems, email, orderStatus, paymentStatus, orderType, orderAmount } },
                    status: 'occupied'
                }
            })
        sse.send(order, "order_created");

        res.status(200).json({ message: "Order Placed" })

    } catch (err) {
        res.status(500).json("Server Error!")
        console.log(err);
    }
});

这服务器崩溃与错误res.flush不是一个功能.
error
我尝试在res.status()之后发送sse。它工作了,我在我的sse流端点SSE stream response得到了响应,但是调用在postman中被关闭,我得到了错误:将标头发送到客户端后无法设置标头。
headers error

zbq4xfa0

zbq4xfa01#

问题是express-sse使用了flush()方法,这个方法已经被弃用了。您可以尝试以下几种变通方法:
1.使用虚拟刷新方法实现中间件:

app.get('/sse', (req, res, next) => {
  res.flush = () => {}; 
  next();
}, sse.init);

1.使用压缩中间件,它提供了一个flush方法:首先安装压缩包:

npm install compression

然后,在使用sse.init之前,在应用中实现中间件:

const express = require('express');
const compression = require('compression');
const SSE = require('express-sse');
//...
const sse = new SSE();
const app = express();
app.use(compression());
app.get('/sse', sse.init);

有关弃用flush方法的更多信息,请参阅Node.js API弃用页面。此外,您可以在this GitHub issue中找到讨论和其他上下文。

相关问题