注意:不是日期时间和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 字符串,我希望避免每次手动转换。
谢谢你
不,我认为这是不可能的,但是那些不是 Neo4j 的“DateTime”对象吗?如果是这样,我相信它有一个
.toString()
方法可以满足您的需求。
要测试这个,请尝试
console.log(result.createdAt)
如果这作为一个对象记录,请尝试这样做
console.log(`${result.createdAt}`)
如果这是我所期望的,您应该获得 ISO 8601 字符串。默认模板文字函数对作为参数传递的对象调用
.toString()
。是一样的
console.log(result.createdAt.toString())
如果可行,我会看看你们的 API 技术。如果您返回这样的对象,许多框架会自动对其调用
toString()
。如果没有,那可能是解决这个问题的“更正确”的地方。我通常建议您在代码中保留无损对象,并且仅转换为字符串以进行传输。
DateTime.toString()
警告:“正确”是主观的。