这是我的最后一个问题,如果我收到答复。我有一个nodeJS程序,该程序可完美运行。但是,我似乎最后陷入了循环。我相信这样做的原因是因为我决定何时终止通过setInterval()
输入到函数中的数据库项循环。
此参数(例如设置为0,并在脚本末尾升至1)在调用setInterval函数时始终始终从0开始。它会在数据库中更新,并在函数末尾的脚本中更新,而ut在函数重新启动时具有原始值。有解决此问题的想法吗?
router.get('/run', function(req, res) {
console.log("res.locals.user.username);
const receiver = res.locals.user.email;
// let threshold = parseInt(res.locals.user.threshold);
const check_rate = parseInt(res.locals.user.checkRate);
const email = res.locals.user.Login;
const password = res.locals.user.Password;
const props = {
var1,
var2
};
const switches = "";
adduser.find({
ownerUsername: res.locals.user.username
}).then(function(results) {
res.render('index', {
var12: results
});
setInterval(function() {
let threshold = parseInt(res.locals.user.threshold);
doSomething(threshld, check_rt, email, password, var1,);
}, 10 * 1000);
// console.log("restarting function \n Threshold value is " +res.locals.user.threshold);
})
});
function doSomething(Threshold, checkRate, email, password, var1, receiver, switches) {
console.log("Running dosomething() Now");
if (res.total_missed >= Threshold) {
console.log(res.total_missed);
console.log("res.total_missed is = " + res.total_missed);
Threshld++
User.update({
var1: var1
}, {
thrshld: Threshld,
}, function(err, res) {
//handle it
})
doSomethingElse(password, email, props);
}
}
})
}
好的,是的,这是我的代码的最佳示例,我无需复制粘贴就可以制作代码。这里的问题是,let Threshold = res.locals.user.threshold;
行没有被更新,并且每次在doSomething()
函数期间数据库中的阈值递增并更新为1时,都从数据库中将其拉为0。>
再次感谢您的帮助!
答案 0 :(得分:0)
let Threshold = res.locals.user.threshold;
未从数据库中提取。您正在将其从响应对象中拉出来...
因此,您应该问自己,为什么0
通过网络发送到GET端点?还有为什么在响应中?
此外,您确定要更新数据库中的用户吗?这是我看到的:
function doSomething(Threshold, checkRate, email, password, var1, receiver, switches) {
console.log("Running dosomething() Now");
console.log("Threshold in Start of Check Function is = " + Threshold);
if (res.total_missed >= Threshold) {
console.log(res.total_missed);
console.log("res.total_missed is = " + res.total_missed);
Threshold++
User.update({
username: var1 // <--- searches for username given some param: var1
}, {
threshold: Threshold, /// < ---- updates this user property with this new value
}, function(err, numberAffected, rawResponse) {
//handle it
})
因此,您可以通过var1
来吸引用户。让我们看一下如何注入该用户:
doSomething(threshold, check_rate, email, password, var1, receiver, switches);
因此,您直接传递var1
。完全不知道var1代表什么。错误的命名约定。除了...在哪里设置?根据您提供的代码,我看到的唯一另一件事是:
const props = {
var1,
var2
};
因此,我的猜测是您要向数据库更新功能提供null
或undefined
,但实际上并没有更新用户。然后,我进一步打赌,在您查询locals.user
并向您的请求提供数据时,总是会发现0,因为您没有更新它。
此外,您还将从response
对象中获取大量信息,而不是request
对象中的
答案 1 :(得分:0)
非常简单
在此页面的开头(在get请求之外)初始化变量。