【发布时间】:2021-12-04 16:21:44
【问题描述】:
我正在尝试在 Firestore 上设置一个带有数字字段的文档。 我刚刚关注了an example from the official document of Firestore。
import * as admin from 'firebase-admin';
admin.initializeApp({
/* I set here properly */
});
const db = admin.firestore();
function setPost() {
const docRef = db.collection('posts').doc();
await docRef.set({
postId: v4(), // uuid
createdAt: Date.now(), // it is a number. and it occurs an error.
});
};
错误
失败:13 内部:请求消息序列化失败:util.Long.fromValue 不是函数 错误:13 内部:请求消息序列化失败:util.Long.fromValue 不是函数
如果我用${} 包裹Date.now(),效果很好。
await docRef.set({
postId: v4(), // uuid
createdAt: `${Date.now()}`,
});
更新
我也尝试了下面的代码,但仍然抛出同样的错误。
await docRef.set({
postId: v4(), // uuid
createdAt: 123,
});
【问题讨论】:
-
你能指出你在哪里找到了这个具体的例子吗?
-
@AlexL 我添加了一个示例链接。
-
嘿,您提到的链接不使用
Date.now(),而是使用new Date(),更具体地说,在node.js 调用中它指定了一个Timestamp.fromDate函数,用于转换日期值转换为 Firestore 可以轻松接受的时间戳。 (更重要的是,您收到的错误消息似乎类似于 this case ,其中一些其他库正在覆盖来自util的Long)。因此,如果不是 node.js,您从文档中遵循了哪些示例? -
@fabc 感谢您的回答,但我将
Date.now()更改为简单的数字,例如1、123,但它仍然无法使用相同的错误。 -
您没有阅读@fabc 提供的链接。 Node 中的问题,特别是与数字参数有关(即
long)。您避免错误的一种方法将值转换为字符串,即对象文字```$${Date.now()}``` 这显然可以避免protobuf调用util.long的需要。升级节点 package.json。
标签: node.js firebase google-cloud-firestore