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

在Firestore写入数字类型字段时报util.Long.fromValue is not a function错误如何解决

问题根因

该报错是firebase-admin依赖的protobufjs库与long包版本不兼容导致的:protobufjs在序列化数字类型值到gRPC请求时,会调用long包的Long.fromValue方法,当项目中long包版本过高/缺失时,就会抛出这个错误。所以不管你写入的是Date.now()生成的时间戳还是静态数字123,只要是数字类型都会触发该错误;转成字符串后绕开了数字序列化逻辑,因此可以正常运行。

解决方案

  • 方案一:安装兼容版本的long包
    运行命令:
    npm install long@^4.0.0
    
    注:long 5.x版本修改了模块导出方式,旧版本protobufjs无法识别对应方法,安装4.x版本即可解决问题。
  • 方案二:清理依赖后重新安装
    冗余的依赖缓存也可能导致该问题,按以下步骤操作即可:
    1. 删除项目根目录下的node_modules文件夹
    2. 删除package-lock.json(npm用户)或yarn.lock(yarn用户)文件
    3. 重新执行npm install或yarn install
  • 方案三:升级Firebase Admin SDK到最新稳定版
    运行命令:
    npm install firebase-admin@latest
    
    新版SDK已经修复了相关依赖兼容性问题。

额外优化建议

Firestore官方推荐使用内置的服务端时间戳来记录文档创建/更新时间,无需手动传入时间戳:

await docRef.set({
  postId: v4(),
  createdAt: admin.firestore.FieldValue.serverTimestamp()
});

这种方式生成的时间戳是Firestore标准的Timestamp类型,后续查询、排序的兼容性更好,也不会触发本次的序列化错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:36:05