Apollo/GraphQL:用于时间戳的字段类型?
Posted
技术标签:
【中文标题】Apollo/GraphQL:用于时间戳的字段类型?【英文标题】:Apollo/GraphQL: Field Type to Use for Timestamp? 【发布时间】:2017-04-26 16:33:48 【问题描述】:我正在将一个值存储到 timestamp with time zone
类型的 postgres 字段中。我在 Apollo 模式中将该字段定义为 int,但在解析器中收到此错误消息:
列“apptDateTime”是带时区的时间戳类型,但表达式是整数类型
查找GraphQL data types,我还没有看到任何类型被引用为对应于时间戳类型的字段。
对于数据库中时间戳类型的字段,在 Apollo 模式中使用的正确字段类型是什么?
【问题讨论】:
查看日期标量部分:graphql.org/learn/schema/#scalar-types 可能最好定义一个自定义标量。 我正在阅读日期和 Apollo,我注意到在 Tally 发布的内容中,需要为此添加自定义代码。我在这里找到了文档:dev.apollodata.com/tools/graphql-tools/… 文档定义了解析器映射,但似乎没有显示如何在架构和/或其他解析器中包含解析器映射。有人可以提供或链接到如何从您的其他 Apollo 解析器引用解析器映射的示例吗? 这是对 json 的处理方式:github.com/taion/graphql-type-json/blob/master/src/index.js 【参考方案1】:我的突变工作包括一个带时区的时间戳类型字段。我通过将我的 apptDateTime 字段的架构从 Int 更改为 String,并传入一个 ISO 字符串来做到这一点。 Sequelize 和 Postgres 负责将其更改为带时区的 Timestamp 类型的字段。
2021 年更新:
这就是我这些天使用的东西。
续集:
timeOfNonce: type: Sequelize.DATE
架构:
scalar DATETIME
.....
timeOfNonce: DATETIME
这些天我让 Sequelize 通过以下方式定义我的 SQL 表:
const deleteAllData_fromThisModel = false;
const alterThisTableToMatchDBConnectorsModel = true;
myDataModel.sync(force: deleteAllData_fromThisModel,
alter: alterThisTableToMatchDBConnectorsModel).then(err =>
console.log('myDataModel has been synced')
).catch(err =>
throw err
);
【讨论】:
你能展示一些你的代码吗?你不需要 : require('pg').types.setTypeParser(1114, function(stringValue) return new Date(stringValue + "+0000"); // 例如,UTC 偏移量。使用任何你想要的偏移量。 );【参考方案2】:我发现这种方式可以处理表单中的输入,需要从客户端(输入表单)转换到服务器,以及从服务器到客户端(输入表单)
Graphql:
updatedAt: String
续集:
updatedAt: type: Sequelize.DATE ,
Postgresql:
"createdAt" timestamp(6) with time zone DEFAULT now(),
值转换到服务器:
value = dateToISO(value);
向客户端转换值:
if ( isNil(value) )
value = '';
else
value = value.toLocaleDateString() +' '+ value.toLocaleTimeString();
帮手:
let dateToISO = function (dateString)
if (!dateString)
return null;
let p = dateString.split(/\D/g);
/* It's up your date on input in this case come from DD-MM-YYYY
for MM-DD-YYY use: return [p[1], p[2], p[0]].join('-'); */
return [p[2], p[1], p[0]].join('-');
;
【讨论】:
以上是关于Apollo/GraphQL:用于时间戳的字段类型?的主要内容,如果未能解决你的问题,请参考以下文章