Node.js 如果客户端在NodeJs中取消中间的请求,则停止进一步的执行过程
我正在我的NodeJs服务器上使用Puppeter、cheerio和pdfkit创建网站的pdf,这需要很多时间,现在我想在客户端取消请求时中止所有进程,即关闭浏览器、选项卡等,以便服务器不处理不必要的进程。 例如:Node.js 如果客户端在NodeJs中取消中间的请求,则停止进一步的执行过程,node.js,express,Node.js,Express,我正在我的NodeJs服务器上使用Puppeter、cheerio和pdfkit创建网站的pdf,这需要很多时间,现在我想在客户端取消请求时中止所有进程,即关闭浏览器、选项卡等,以便服务器不处理不必要的进程。 例如: app.get("/api/processScreenshot/:url", async (req, resp) => { const links = await collectAllLinks(url); const screenshotsPat
app.get("/api/processScreenshot/:url", async (req, resp) => {
const links = await collectAllLinks(url);
const screenshotsPath = await takeScreenshots(links);
const pdfPath = await createPDF(screenshotsPath);
resp.status(200).end(pdfPath);
});
如果请求以任何方式被取消,即它接收到取消、关闭或中止事件,是否可以中止此rest API中的所有后续进程?没有取消任何异步函数的通用方法,因此,如果您只看到一个wait
函数,您需要深入了解该函数,看看它们是否有取消该过程的功能
例如,为什么createPdf
是异步的?也许这需要一个外部过程?你可以扼杀这个过程。也许它会调用第三方API?取消HTTP请求
可以取消的基于承诺的API的一个很好的例子是fetch,它使用
AbortController
。这也是一个很好的模式,可以应用于您自己的函数,但是您需要为任何要添加取消支持的函数显式(主要是手动)编写代码。如果这些是一些同步调用,比如说一些繁重的计算,我知道大多数基于promise的API都提供中止或终止事件,但如果有人故意进行调用,然后在调用之间取消请求,并且请求正在执行一些计算工作,这会使我的服务器对实际用户/用例繁忙。@SandePathi您不能真正中断同步功能。要让其他东西干扰它,它必须是异步的。只要同步函数在Javascript中运行,其他Javascript代码就不会执行,除非它在单独的进程或webworker中运行。