gpt4 book ai didi

node.js - 从前端停止 Node 服务器中的功能

转载 作者:太空宇宙 更新时间:2023-11-04 01:33:38 25 4
gpt4 key购买 nike

我正在构建这个应用程序,每个用户都可以在我的node.js服务器中执行一个函数,该函数是一个不断运行和更新数据库的循环。我的目标是找到一种方法来停止用户执行的函数,让您了解我已经实现的逻辑,请参阅下面的代码:

app.get('/api/v1/', cors(), (request, response) => {
let timer = setInterval(apiCall, interval);
if (request.query.running === false) {
clearInterval(timer);
}
function apiCall(i) {
webshot(url, 'public/' + filename, options, function (err) {
if (err) { console.log(err) }
});
}
})

我打算发送一个带有 running=false 的 API 调用来停止它,但它似乎不起作用,它只是创建了另一个线程

最佳答案

您的方法有效,但在逻辑上进行了一些改进和更改:

  • 您应该与“false”而不是 false 进行比较,或者解析/评估查询字符串。
  • 您的timer变量的范围应该是整个网络进程。如果您在函数内声明它,则会丢失其引用,以便稍后在 clearInterval 中使用它。
  • 您的 setInterval 必须位于 else 子句内,否则您将取消它并在同一调用中再次启动它。
  • 您的示例没有定义 interval 变量。我改了2秒。

更改后,您的示例就可以工作了。检查一下:

var express = require('express');
var app = express();
var timer;

function apiCall(i) {
console.log("api called " + Date());
}

app.get('/api/v1/', (request, response) => {
if (request.query.running === 'false') {
clearInterval(timer);
console.log('Timer stopped');
} else {
console.log('Timer started');
timer = setInterval(apiCall, 2000);
}
response.send(200);
})

app.listen(3000);

当然,这个解决方案有一个问题:它不会区分用户调用:这意味着如果多个用户调用您的 API 端点,那么所有用户都将与同一个计时器进行交互。如果您希望每个用户有不同的计时器,则必须在 api 中添加逻辑来检测哪个用户进行了调用,当然,每个用户都有不同的计时器。最简单的方法是在 API 调用中添加一个名称:/api/v1/john/,并使用每个用户的计时器变量进行映射,而不是使用 timer 变量。问候!

关于node.js - 从前端停止 Node 服务器中的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55215251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com