我尝试使用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
1条答案
按热度按时间zbq4xfa01#
问题是express-sse使用了flush()方法,这个方法已经被弃用了。您可以尝试以下几种变通方法:
1.使用虚拟刷新方法实现中间件:
1.使用压缩中间件,它提供了一个flush方法:首先安装压缩包:
然后,在使用sse.init之前,在应用中实现中间件:
有关弃用flush方法的更多信息,请参阅Node.js API弃用页面。此外,您可以在this GitHub issue中找到讨论和其他上下文。