NodeJS 将值保存到节点服务器之外

os8fio9y  于 2022-12-03  发布在  Node.js
关注(0)|答案(2)|浏览(130)

是否有一种方法可以将时间戳保存到应用程序/对象之外,以便在重新启动nodeserver时可以获得该值?
我需要这个为我的cronjob。我需要保存最后一次同步,即使我重新启动服务器。

b4lqfgs4

b4lqfgs41#

有很多种方法可以保存这类信息,以便在重新启动节点进程时加载它。一种是将它写入文件系统中的一个文件,然后在启动程序时读取它。
要将当前时间戳写入文件,请执行以下操作。

const fs = require('fs')
...
fs.writeFile('timestamp.txt', Date.now().toString(), err => {console.error(err)})

要阅读它,请执行以下操作。

const fs = require('fs')
...
const timestamp = Number(fs.readFileSync('timestamp.txt'))

显然,要把文件放到正确的目录中,处理错误,以及处理在写文件之前试图读取文件的情况,还有更多的编程工作要做。
你也可以把它存储在某种数据库中,但这应该可以满足你的需要,除非你使用的是Heroku这样的系统,在那里文件并不总是在每次运行时被保存。

xoshrz7s

xoshrz7s2#

当一个进程死亡时,存储在其工作内存中的所有数据(如变量和函数)也随之死亡。我最近编写了一个npm包cashola,它使得在进程重新启动时存储这些数据变得更容易。
您可以运行此示例脚本两次,并查看每次的print语句有何不同。

import { rememberSync } from 'cashola';

const myState = rememberSync('timestamp-example');

console.log('Before:', myState);
// First run: {}
// Second run: { <timeString1>: 'hi! }
myState[new Date.getTime().toString()] = 'hi!';
console.log('After:', myState);
// First run: { <timeString1>: 'hi! }
// Second run: { <timeString1>: 'hi!, <timeString2>: 'hi! }

相关问题