You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

lowdb更新JSON文件异常:仅primary_autorization_date字段变更

解决LowDB仅部分字段更新的异常问题

从你贴的代码和日志来看,这个问题有点反常:你明明在代码里更新了access_token、expires_in等字段,但最终JSON文件里只有未被你操作的primary_autorization_date变了,目标字段完全没更新。我来帮你拆解可能的原因和解决办法:

1. 先排查tokens变量的初始化是否正确

LowDB的set方法是作用在当前指向的数据库节点上的,如果你的tokens变量没有直接指向数据库的根对象,那你的更新操作根本没落到你期望的位置。

举个例子,如果你的初始化代码是这样的:

const tokens = db.get('auth.subPath') // 指向根对象下的某个子节点

但你的JSON文件里所有字段都是根级的(比如access_token直接在最外层),那你调用set('access_token', ...)其实是在修改auth.subPath.access_token,而非根对象的access_token,自然不会更新到你看到的JSON文件里。

解决办法:确保tokens直接指向数据库根节点,比如:

const tokens = db // 直接操作根对象

如果你的token字段确实在某个子节点下,一定要保证读取和写入的路径完全一致。

2. 检查是否有其他代码在修改primary_autorization_date

你的代码里完全没有对primary_autorization_date做任何操作,但这个字段却发生了变更——这说明肯定有其他逻辑在同时读写这个JSON文件。比如:

  • 是否有定时器、其他异步请求在同一时间更新该字段?
  • 是否有其他模块也在操作这个文件,导致写入冲突?

解决办法:

  • 全局搜索代码库,找到所有修改primary_autorization_date的地方,确认执行顺序是否会覆盖你的token更新操作;
  • 如果是并发写入冲突,建议给LowDB的写入操作加个简单的锁,或者确保同一时间只有一个写入动作在执行。

3. 修正Moment对象的序列化问题

你代码里直接把moment()对象写入数据库,LowDB在序列化Moment对象时可能会出现异常,导致写入不完整或者失败。

解决办法:把Moment对象转成标准的ISO日期字符串后再写入:

.set('refresh_date', moment().toISOString())

4. 验证写入前后的数据库状态

你代码里打印了final和tokens.value(),但要重点确认:

  • 调用write()之前,tokens.value()是否已经包含了新的token值?如果没有,说明你的set操作根本没生效,回到第一步排查tokens的指向;
  • 如果tokens.value()是正确的,但写入文件后不对,那问题可能出在LowDB的写入机制或者文件系统层面,你可以尝试简化代码直接用根对象写入测试:
// 替换原来的链式调用,直接操作根对象
db.set('access_token', final.access_token)
  .set('expires_in', final.expires_in)
  .set('refresh_token', final.refresh_token)
  .set('refresh_date', moment().toISOString())
  .write()
// 写入后立即读取验证
console.log('写入后的数据库内容:', db.value())

如果这样能正确更新所有字段,那基本可以确定是之前的tokens变量初始化有问题。


内容的提问来源于stack exchange,提问作者dolor3sh4ze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:27:35