如何为单个请求多次发送数据



我正在制作Nodejs并表示基于应用程序的某些产品的订单可以接受。在这个应用程序中,一旦订单来了,它就被保存到数据库中,然后生成一个pdf文件作为订单收据。生成pdf需要一些时间,因此一旦订单保存在数据库中,我就将数据发送给用户。但是在下单页面上有一个表,其中显示了所有以前的订单。由于pdf是在向用户发送响应后生成的,因此我必须不断轮询服务器以检查是否有任何未优化的新订单。那么是否有一种方法可以再次发送响应到相同的请求。这里是我想要实现的代码表示

//import Order model
app.post('/',async (req,res)=>{

let order = new Order(//data from req obj)
await order.save();
res.json({msg : 'order saved'});
//generate pdf and save it on cloud
res.json({pdfLink : pdf.link}) 
})

您所描述的当前解决方案称为长轮询。当PDF链接可用时,你可以考虑使用websockets将其推送到前端。

经过一番研究,我发现有两种方法可以解决这个问题

  1. 正如@Dustin Mackenzie所说,使用web套接字是一个完全有效的解决方案,但对于只有一部分应用程序,我需要做很多事情,比如安装套接字。Io/实现我自己的web套接字。然后管理客户端以及web套接字。

  2. 使用服务器发送的事件,这是非常容易的,它不需要我使用任何特定的库。它有非常广泛的浏览器支持,实现它就像在发送响应和使用res.write()时设置内容类型头一样简单,遵循特定的语法

根据文档,您不允许对单个请求发送多个响应。

请使用res.write(),将解决您的问题。这是nodejs内部函数。

有关res.write函数的更多信息,请参考官方文档。

您不能对一个请求响应两次。你需要把你的回答组合成一个单一的回答。例如:

res.json({
msg : 'order saved',
pdfLink : pdf.link
})

相关内容

  • 没有找到相关文章

最新更新