Node + Neo4j 驱动程序 - 有没有办法设置“全局”类型转换器,以便任何日期时间属性都是 ISO8601 字符串而不是 JS 对象?

问题描述 投票:0回答:1

注意:不是日期时间和iso格式的重复,因为它与我的问题根本无关。请不要关闭我的问题,因为我问的是有关全局类型转换器的不同问题,而不是如何将日期时间作为字符串返回。谢谢您的理解。

我正在使用node和neo4j。

日期,如createdAt或sentAt,存储为datetime($now),其中now是

new Date().toISOString()

但是,当我从 neo4j 查询记录时,驱动程序会返回任何

datetime
类型的 JS 对象。

现在我当然可以做

new Date(record.createdAt).toISOString()
,但那很麻烦。或者我可以明确要求查询以字符串形式返回日期时间。然而,这很乏味,我只是查询整个记录,因为它们是针对强类型强制存储的。

有没有办法设置一个全局类型转换器,以便如果 RECORD 有任何

datetime
属性(sentAt、createdAt 等等),它会自动转换并返回为 ISO8601 字符串,而不是默认的 JS 对象?

例如,有这样的吗? (不是实际代码 - 这显然行不通,但是类似这样的东西可以定义一次)

const driver = neo4j.driver(uri, neo4j.auth.basic(user, password), {
  converters: {
    datetime: convertDatetimeToISOString // will use neo4j.isDateTime to check and return .toString()
  }
});

现在我正在运行返回的记录,认为自定义函数可以执行相同的操作,但这意味着每次查询时我都必须先通过此方法运行记录,然后再使用它们。再说一次,这很好,但我想知道是否有办法一次性设置它。

我的 API 使用者期望 ISO 8601 字符串,我希望避免每次手动转换。

谢谢你

node.js neo4j
1个回答
0
投票

不,我认为这是不可能的,但是那些不是 Neo4j 的“DateTime”对象吗?如果是这样,我相信它有一个

.toString()
方法可以满足您的需求。

要测试这个,请尝试

console.log(result.createdAt)

如果这作为一个对象记录,请尝试这样做

console.log(`${result.createdAt}`)

如果这是我所期望的,您应该获得 ISO 8601 字符串。默认模板文字函数对作为参数传递的对象调用

.toString()
。是一样的

console.log(result.createdAt.toString())

如果可行,我会看看你们的 API 技术。如果您返回这样的对象,许多框架会自动对其调用

toString()
。如果没有,那可能是解决这个问题的“更正确”的地方。我通常建议您在代码中保留无损对象,并且仅转换为字符串以进行传输。

驱动源代码

DateTime.toString()

警告:“正确”是主观的。

© www.soinside.com 2019 - 2024. All rights reserved.