Nodejs变量,每个快速会话持续存在
我有一些每个用户都有的信息,这些信息不会经常更改,因此我使用node-cron
设置了一个cronjob,每天更新一次。
我的问题是:我在哪里可以存储这个值?
我尝试了app.locals
,但从我看到它作为整个应用程序的全局变量,意味着所有用户在此变量中具有相同的值。
我也尝试使用res.locals
,它可以很好地工作,但仅适用于第一页加载,它是设置的地方。之后,当我重新加载页面时,变量是未定义的,因为它只被设置一次。
我这样做的方式:我的代码中有一个中间件,用于检查cronjob是否已经安排好。如果没有,那么它会调度cronjob并运行代码一次以获取值,然后将其设置为res.locals,这就是它在第一次加载时的工作原理。当我重新加载时,这个中间件可以看到变量已经设置好,所以它使用next()
函数直接进入下一个中间件或路由。
我检查当前是否设置了cronjob的方式也是错误的,因为同样的问题。现在我有一个全局变量cronSchedule
,它是一个布尔值。问题是它是app范围变量,所以当第一个用户加载页面时,变量设置为true,因此cronjob不会发生在其他用户身上。
我的中间件
app.use( function( req, res, next ) {
if (!cronScheduled) {
// schedule tasks to be run on the server
cron.schedule('0 0 * * *', function() {
functionToGetData();
});
functionToGetData();
} else {
next();
}
} );
回答如下:
我只是设法搞清楚了!
使用req.session
我设法完成了这个。
这是我更新的中间件:
app.use( function( req, res, next ) {
if ( req.user !== undefined && !req.session.cronIsScheduled) {
// schedule tasks to be run on the server
cron.schedule('0 0 * * *', function() {
functionToGetData();
});
functionToGetData();
} else {
next();
}
} );
我添加了一段代码,将会话中的这个值添加到res.locals
app.use( function( req, res, next ) {
res.locals = {
user: req.user !== undefined ? req.user : undefined,
academic_periods_student: req.session.academic_periods_student
};
next();
});
现在,此变量对每个用户都是唯一的,并且不会在每个页面加载时重置。当用户退出并返回时,它也会重置,在我的情况下是奖励!
Nodejs变量,每个快速会话持续存在
我有一些每个用户都有的信息,这些信息不会经常更改,因此我使用node-cron
设置了一个cronjob,每天更新一次。
我的问题是:我在哪里可以存储这个值?
我尝试了app.locals
,但从我看到它作为整个应用程序的全局变量,意味着所有用户在此变量中具有相同的值。
我也尝试使用res.locals
,它可以很好地工作,但仅适用于第一页加载,它是设置的地方。之后,当我重新加载页面时,变量是未定义的,因为它只被设置一次。
我这样做的方式:我的代码中有一个中间件,用于检查cronjob是否已经安排好。如果没有,那么它会调度cronjob并运行代码一次以获取值,然后将其设置为res.locals,这就是它在第一次加载时的工作原理。当我重新加载时,这个中间件可以看到变量已经设置好,所以它使用next()
函数直接进入下一个中间件或路由。
我检查当前是否设置了cronjob的方式也是错误的,因为同样的问题。现在我有一个全局变量cronSchedule
,它是一个布尔值。问题是它是app范围变量,所以当第一个用户加载页面时,变量设置为true,因此cronjob不会发生在其他用户身上。
我的中间件
app.use( function( req, res, next ) {
if (!cronScheduled) {
// schedule tasks to be run on the server
cron.schedule('0 0 * * *', function() {
functionToGetData();
});
functionToGetData();
} else {
next();
}
} );
回答如下:
我只是设法搞清楚了!
使用req.session
我设法完成了这个。
这是我更新的中间件:
app.use( function( req, res, next ) {
if ( req.user !== undefined && !req.session.cronIsScheduled) {
// schedule tasks to be run on the server
cron.schedule('0 0 * * *', function() {
functionToGetData();
});
functionToGetData();
} else {
next();
}
} );
我添加了一段代码,将会话中的这个值添加到res.locals
app.use( function( req, res, next ) {
res.locals = {
user: req.user !== undefined ? req.user : undefined,
academic_periods_student: req.session.academic_periods_student
};
next();
});
现在,此变量对每个用户都是唯一的,并且不会在每个页面加载时重置。当用户退出并返回时,它也会重置,在我的情况下是奖励!